diff options
Diffstat (limited to 'qface/idl')
-rw-r--r-- | qface/idl/__init__.py | 0 | ||||
-rw-r--r-- | qface/idl/domain.py | 348 | ||||
-rw-r--r-- | qface/idl/listener.py | 197 | ||||
-rw-r--r-- | qface/idl/parser/T.g4 | 112 | ||||
-rw-r--r-- | qface/idl/parser/T.tokens | 58 | ||||
-rw-r--r-- | qface/idl/parser/TLexer.py | 185 | ||||
-rw-r--r-- | qface/idl/parser/TLexer.tokens | 58 | ||||
-rw-r--r-- | qface/idl/parser/TListener.py | 199 | ||||
-rw-r--r-- | qface/idl/parser/TParser.py | 1669 | ||||
-rw-r--r-- | qface/idl/parser/TVisitor.py | 118 | ||||
-rw-r--r-- | qface/idl/parser/__init__.py | 0 |
11 files changed, 2944 insertions, 0 deletions
diff --git a/qface/idl/__init__.py b/qface/idl/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/qface/idl/__init__.py diff --git a/qface/idl/domain.py b/qface/idl/domain.py new file mode 100644 index 0000000..e726a7b --- /dev/null +++ b/qface/idl/domain.py @@ -0,0 +1,348 @@ +# Copyright (c) Pelagicore AB 2016 + +'''The domian module contains an object hierachy which resembles the +QDL grammar as a domain model. It is created from the QDL and the main +input for the code generation templates. + +.. note:: Changes on this API will result into broken templates + +.. code-block:: text + + System + +- Module + +- Import + +- Interface + +- Property + +- Operation + +- Event + +- Struct (has attributes) + +- Enum (has values) + +.. note:: When the API talks about an order list, the order is by appearance in the QDL file. +''' + +from collections import OrderedDict, ChainMap +import logging + +log = logging.getLogger(__name__) + + + +class System(object): + """The root entity which consist of modules""" + def __init__(self): + log.debug('System()') + self._moduleMap = OrderedDict() # type: dict[str, Module] + + def __unicode__(self): + return 'system' + + def __repr__(self): + return '<System>' + + @property + def modules(self): + '''returns ordered list of module symbols''' + return self._moduleMap.values() + + def lookup(self, name: str): + '''lookup a symbol by fully qualified name.''' + # <module> + print('lookup: ' + name) + if name in self._moduleMap: + return self._moduleMap[name] + # <module>.<Symbol> + (module_name, type_name) = self.split_typename(name) + if not module_name and type_name: + print('not able to lookup symbol: {0}'.format(name)) + return None + module = self._moduleMap[module_name] + return module.lookup(type_name) + + @staticmethod + def split_typename(name): + parts = name.rsplit('.', 1) + if len(parts) == 1: + return ('', parts[0]) + if len(parts) == 2: + return parts + return ('', '') + + + +class Symbol(object): + """A symbol represents a base class for names elements""" + def __init__(self, name: str, module: 'Module'): + self.name = name + """symbol name""" + self.module = module + """module the symbol belongs to""" + self.comment = '' + """comment which appeared in QDL right before symbol""" + + @property + def system(self): + '''returns reference to system''' + return self.module._system + + @property + def qualified_name(self): + '''return the fully qualified name (`module + "." + name`)''' + return '{0}.{1}'.format(self.module.name, self.name) + + def __unicode__(self): + return self.name + + def __str__(self): + return self.name + + def __repr__(self): + return '<{0} name={1}>'.format(type(self), self.name) + + + +class TypedSymbol(Symbol): + """A symbol which has a type, like an operation or property.""" + def __init__(self, name: str, module: 'Module'): + super().__init__(name, module) + self.type = TypeSymbol("", self) + """type object of the symbol""" + + +class TypeSymbol(Symbol): + """Defines a type in the system""" + def __init__(self, name: str, parent: Symbol): + super().__init__(name, parent.module) + log.debug('TypeSymbol()') + self.parent = parent + self.is_void = False # type:bool + self.is_primitive = False # type:bool + self.is_complex = False # type:bool + self.is_list = False # type:bool + self.is_model = False # type:bool + self.nested = None + """nested type if symbol is list or model""" + self.__reference = None + self.__is_resolved = False + + @property + def is_bool(self): + '''checks if type is primitive and bool''' + return self.is_primitive and self.name == 'bool' + + @property + def is_int(self): + '''checks if type is primitive and int''' + return self.is_primitive and self.name == 'int' + + @property + def is_real(self): + '''checks if type is primitive and real''' + return self.is_primitive and self.name == 'real' + + @property + def is_string(self): + '''checks if type is primitive and string''' + return self.is_primitive and self.name == 'string' + + @property + def is_enum(self): + '''checks if type is complex and enum''' + return self.is_complex and isinstance(self.reference, Enum) + + @property + def is_struct(self): + '''checks if type is complex and struct''' + return self.is_complex and isinstance(self.reference, Struct) + + @property + def is_variant(self): + '''checks if type is primitive and string''' + return self.is_primitive and self.name == 'var' + + @property + def reference(self): + """returns the symbol reference of the type name""" + if not self.__is_resolved: + self._resolve() + return self.__reference + + def _resolve(self): + """resolve the type symbol from name by doing a lookup""" + self.__is_resolved = True + if self.is_complex: + type = self.nested if self.nested else self + type.__reference = self.module.lookup(type.name) + + +class Module(Symbol): + """Module is a namespace for types, e.g. interfaces, enums, structs""" + def __init__(self, name: str, system: System): + """init""" + super().__init__(name, self) + log.debug('Module()') + self.version = '1.0' + self._system = system + self._system._moduleMap[name] = self + self._interfaceMap = OrderedDict() # type: dict[str, Interface] + self._structMap = OrderedDict() # type: dict[str, Struct] + self._enumMap = OrderedDict() # type: dict[str, Enum] + self._definitionMap = ChainMap(self._interfaceMap, self._structMap, self._enumMap) + self._importMap = OrderedDict() # type: dict[str, Module] + + @property + def interfaces(self): + '''returns ordered list of interface symbols''' + return self._interfaceMap.values() + + @property + def structs(self): + '''returns ordered list of struct symbols''' + return self._structMap.values() + + @property + def enums(self): + '''returns ordered list of enum symbols''' + return self._enumMap.values() + + @property + def imports(self): + '''returns ordered list of import symbols''' + return self._importMap.values() + + def checkType(self, type: str): + if type.is_primitive: + return True + (module_name, type_name) = System.split_typename(type.name) + if module_name and module_name not in self._importMap: + return False + return True + + @property + def name_parts(self): + '''return module name splitted by '.' in parts''' + return self.name.split('.') + + @property + def module_name(self): + return self.name.split('.')[-1].capitalize() + + def lookup(self, name: str): + '''lookup a symbol by name. If symbol is not local + it will be looked up system wide''' + if name in self._definitionMap: + return self._definitionMap[name] + return self.system.lookup(name) + + +class Interface(Symbol): + """A interface is an object with operations, properties and events""" + def __init__(self, name: str, module: Module): + super().__init__(name, module) + log.debug('Interface()') + self.module._interfaceMap[name] = self + self._propertyMap = OrderedDict() # type: dict[str, Property] + self._operationMap = OrderedDict() # type: dict[str, Operation] + self._eventMap = OrderedDict() # type: dict[str, Operation] + + @property + def properties(self): + '''returns ordered list of properties''' + return self._propertyMap.values() + + @property + def operations(self): + '''returns ordered list of operations''' + return self._operationMap.values() + + @property + def events(self): + '''returns ordered list of events''' + return self._eventMap.values() + + +class Operation(TypedSymbol): + """An operation inside a interface""" + def __init__(self, name: str, interface: Interface, is_event=False): + super().__init__(name, interface.module) + log.debug('Operation()') + self.interface = interface + self.is_event = is_event + if is_event: + self.interface._eventMap[name] = self + else: + self.interface._operationMap[name] = self + self._parameterMap = OrderedDict() # type: dict[Parameter] + + @property + def parameters(self): + '''returns ordered list of parameters''' + return self._parameterMap.values() + + +class Parameter(TypedSymbol): + """An operation parameter""" + def __init__(self, name: str, operation: Operation): + super().__init__(name, operation.module) + log.debug('Parameter()') + self.operation = operation + self.operation._parameterMap[name] = self + + +class Property(TypedSymbol): + """A typed property inside a interface""" + def __init__(self, name: str, interface: Interface): + super().__init__(name, interface.module) + log.debug('Property()') + self.interface = interface + self.interface._propertyMap[name] = self + self.is_readonly = False + + +class Struct(Symbol): + """Represents a data container""" + def __init__(self, name: str, module: Module): + super().__init__(name, module) + log.debug('Struct()') + self.module._structMap[name] = self + self._fieldMap = OrderedDict() # type: dict[str, Field] + + @property + def fields(self): + '''returns ordered list of members''' + return self._fieldMap.values() + + +class Field(TypedSymbol): + """A member in a struct""" + def __init__(self, name: str, struct: Struct): + super().__init__(name, struct.module) + log.debug('Field()') + self.struct = struct # type:Struct + self.struct._fieldMap[name] = self + + +class Enum(Symbol): + """An enum (flag) inside a module""" + def __init__(self, name: str, module: Module): + super().__init__(name, module) + log.debug('Enum()') + self.is_enum = True + self.is_flag = False + self.module._enumMap[name] = self + self._memberMap = OrderedDict() # type: dict[EnumMember] + + @property + def members(self): + '''returns ordered list of members''' + return self._memberMap.values() + + +class EnumMember(Symbol): + """A enum value""" + def __init__(self, name: str, enum: Enum): + super().__init__(name, enum.module) + log.debug('EnumMember()') + self.enum = enum + self.enum._memberMap[name] = self + self.value = 0 diff --git a/qface/idl/listener.py b/qface/idl/listener.py new file mode 100644 index 0000000..b257005 --- /dev/null +++ b/qface/idl/listener.py @@ -0,0 +1,197 @@ +# Copyright (c) Pelagicore AB 2016 +import logging +from _operator import concat + +from .parser.TListener import TListener +from .parser.TParser import TParser +from .domain import * +from antlr4 import ParserRuleContext + + +log = logging.getLogger(__name__) + +# associates parser context to domain objects +contextMap = {} + +class DomainListener(TListener): + """The domain listener is called by the parser to fill the + domain data struture. As a result a system is passed + back""" + def __init__(self, system): + super(DomainListener, self).__init__() + contextMap.clear() + self.system = system or System() # type:System + self.module = None # type:Module + self.interface = None # type:Interface + self.struct = None # type:Struct + self.enum = None # type:Enum + self.enumCounter = 0 # int + self.operation = None # type:Operation + self.parameter = None # type:Parameter + self.property = None # type:Property + self.field = None # type:Field + + def parse_type(self, ctx: ParserRuleContext, type: TypeSymbol): + if not ctx.typeSymbol(): + # import pdb; pdb.set_trace() + type.is_void = True + type.name = 'void' + else: + if ctx.typeSymbol().primitiveTypeSymbol(): + ctxSymbol = ctx.typeSymbol().primitiveTypeSymbol() # type:TParser.PrimitiveTypeSymbolContext + type.is_primitive = True + type.name = ctxSymbol.name.text + elif ctx.typeSymbol().complexTypeSymbol(): + ctxSymbol = ctx.typeSymbol().complexTypeSymbol() # type:TParser.ComplexTypeSymbolContext + type.is_complex = True + type.name = ctxSymbol.name.text + elif ctx.typeSymbol().listTypeSymbol(): + ctxSymbol = ctx.typeSymbol().listTypeSymbol() # type:TParser.ListTypeSymbolContext + type.is_list = True + type.name = 'list' + type.nested = TypeSymbol("", type) + self.parse_type(ctxSymbol, type.nested) + elif ctx.typeSymbol().modelTypeSymbol(): + ctxSymbol = ctx.typeSymbol().modelTypeSymbol() # type:TParser.ModelTypeSymbolContext + type.is_model = True + type.name = 'model' + type.nested = TypeSymbol("", type) + self.parse_type(ctxSymbol, type.nested) + if not type.module.checkType(type): + log.warn('Unknown type: {0}. Missing import?'.format(type.name)) + + def parse_comment(self, ctx, symbol): + if ctx.comment: + comment = ctx.comment.text + symbol.comment = comment + + def enterEveryRule(self, ctx): + log.debug('enter ' + ctx.__class__.__name__) + + def exitEveryRule(self, ctx): + log.debug('exit ' + ctx.__class__.__name__) + + def enterModuleSymbol(self, ctx: TParser.ModuleSymbolContext): + assert self.system + name = ctx.name.text + version = ctx.version.text + self.module = Module(name, self.system) + self.module.version = version + contextMap[ctx] = self.module + + def exitModuleSymbol(self, ctx: TParser.ModuleSymbolContext): + pass + + def enterInterfaceSymbol(self, ctx: TParser.InterfaceSymbolContext): + assert self.module + name = ctx.name.text + self.interface = Interface(name, self.module) + self.parse_comment(ctx, self.interface) + contextMap[ctx] = self.interface + + def exitInterfaceSymbol(self, ctx: TParser.InterfaceSymbolContext): + self.interface = None + + def enterStructSymbol(self, ctx: TParser.StructSymbolContext): + assert self.module + name = ctx.name.text + self.struct = Struct(name, self.module) + self.parse_comment(ctx, self.struct) + contextMap[ctx] = self.struct + + def exitStructSymbol(self, ctx: TParser.StructSymbolContext): + self.struct = None + + def enterEnumSymbol(self, ctx: TParser.EnumSymbolContext): + assert self.module + name = ctx.name.text + # import ipdb; ipdb.set_trace() + self.enum = Enum(name, self.module) + self.parse_comment(ctx, self.enum) + contextMap[ctx] = self.enum + + def exitEnumSymbol(self, ctx: TParser.EnumSymbolContext): + self.enum = None + self.enumCounter = 0 + + def enterEnumTypeSymbol(self, ctx: TParser.EnumTypeSymbolContext): + assert self.enum + self.enumCounter = 0 + if ctx.isFlag: + self.enum.is_enum = False + self.enum.is_flag = True + self.enumCounter = 1 + + def exitEnumTypeSymbol(self, ctx: TParser.EnumTypeSymbolContext): + pass + + def enterOperationSymbol(self, ctx: TParser.OperationSymbolContext): + assert self.interface + name = ctx.name.text + is_event = bool(ctx.isEvent) + self.operation = Operation(name, self.interface, is_event) + self.parse_comment(ctx, self.operation) + self.parse_type(ctx, self.operation.type) + contextMap[ctx] = self.operation + + def exitOperationSymbol(self, ctx: TParser.OperationSymbolContext): + self.operation = None + + def enterOperationParameterSymbol(self, ctx: TParser.OperationParameterSymbolContext): + name = ctx.name.text + self.parameter = Parameter(name, self.operation) + contextMap[ctx] = self.parameter + + def exitOperationParameterSymbol(self, ctx: TParser.OperationParameterSymbolContext): + self.parse_type(ctx, self.parameter.type) + + def enterPropertySymbol(self, ctx: TParser.PropertySymbolContext): + assert self.interface + name = ctx.name.text + self.property = Property(name, self.interface) + self.property.is_readonly = bool(ctx.isReadOnly) + self.parse_comment(ctx, self.property) + self.parse_type(ctx, self.property.type) + contextMap[ctx] = self.property + + def exitPropertySymbol(self, ctx: TParser.PropertySymbolContext): + self.property = None + + def enterStructFieldSymbol(self, ctx: TParser.StructFieldSymbolContext): + assert self.struct + name = ctx.name.text + self.field = Field(name, self.struct) + contextMap[ctx] = self.field + + def exitStructFieldSymbol(self, ctx: TParser.StructFieldSymbolContext): + self.parse_type(ctx, self.field.type) + self.field = None + + def enterEnumMemberSymbol(self, ctx: TParser.EnumMemberSymbolContext): + assert self.enum + name = ctx.name.text + self.field = EnumMember(name, self.enum) + value = self.enumCounter + if ctx.intSymbol(): + value = int(ctx.intSymbol().value.text, 0) + self.field.value = value + contextMap[ctx] = self.field + # import ipdb; ipdb.set_trace() + if self.enum.is_flag: + self.enumCounter <<= 1 + else: + self.enumCounter += 1 + + def exitEnumMemberSymbol(self, ctx: TParser.EnumMemberSymbolContext): + self.field = None + + def enterImportSymbol(self, ctx: TParser.ImportSymbolContext): + assert self.module + name = ctx.name.text + version = ctx.version.text + # import ipdb; ipdb.set_trace() + self.module._importMap[name] = '{0} {1}'.format(name, version) + + def exitImportSymbol(self, ctx: TParser.ImportSymbolContext): + pass + diff --git a/qface/idl/parser/T.g4 b/qface/idl/parser/T.g4 new file mode 100644 index 0000000..292dd59 --- /dev/null +++ b/qface/idl/parser/T.g4 @@ -0,0 +1,112 @@ +// Copyright (c) Pelagicore AB 2016 +grammar T; + + +documentSymbol + : headerSymbol definitionSymbol* + ; + +/** +module name; +import name; +*/ +headerSymbol + : moduleSymbol importSymbol* + ; + +importSymbol + : 'import' name=IDENTIFIER version=VERSION ';'? + ; + +moduleSymbol + : comment=DOCCOMMENT? 'module' name=IDENTIFIER version=VERSION ';'? + ; + +definitionSymbol + : interfaceSymbol + | structSymbol + | enumSymbol + ; + +interfaceSymbol + : comment=DOCCOMMENT? 'interface' name=IDENTIFIER '{' interfaceMemberSymbol* '}' + ; + +interfaceMemberSymbol + : operationSymbol + | propertySymbol + ; + +operationSymbol + : comment=DOCCOMMENT? isEvent='event'? (typeSymbol | 'void') name=IDENTIFIER '(' operationParameterSymbol* ')' ';'? + ; + +propertySymbol + : comment=DOCCOMMENT? isReadOnly='readonly'? typeSymbol name=IDENTIFIER ';'? + ; + +operationParameterSymbol + : typeSymbol name=IDENTIFIER ','? + ; + +typeSymbol + : primitiveTypeSymbol + | complexTypeSymbol + | listTypeSymbol + | modelTypeSymbol + ; + +complexTypeSymbol + : name=IDENTIFIER + ; + +primitiveTypeSymbol + : name='bool' + | name='int' + | name='real' + | name='string' + | name='var' + ; + +listTypeSymbol + : 'list' '<' valueType=typeSymbol '>' + ; + +modelTypeSymbol + : 'model' '<' valueType=typeSymbol '>' + ; + +structSymbol + : comment=DOCCOMMENT? 'struct' name=IDENTIFIER '{' structFieldSymbol* '}' + ; + +structFieldSymbol + : comment=DOCCOMMENT? typeSymbol name=IDENTIFIER ';'? + ; + +enumSymbol + : comment=DOCCOMMENT? enumTypeSymbol name=IDENTIFIER '{' enumMemberSymbol* '}' + ; + +enumTypeSymbol + : isEnum = 'enum' + | isFlag = 'flag' + ; + +enumMemberSymbol + : comment=DOCCOMMENT? name=IDENTIFIER ('=' intSymbol)? ','? + ; + +intSymbol + : value=INTCONSTANT + | value=HEXCONSTANT + ; + +INTCONSTANT : ('+' | '-')? '0'..'9'+; +HEXCONSTANT : '0x' ('0'..'9' | 'a'..'f' | 'A'..'F')+; +IDENTIFIER : [a-zA-Z_][a-zA-Z0-9_\.]*; +VERSION : [0-9]'.'[0-9]; +DOCCOMMENT : '/*!' .*? '*/'; +WHITESPACE : [ \t\r\n]+ -> skip; +COMMENT : '//' ~[\r\n]* -> skip; +MULTICOMM : '/*' .*? '*/' -> skip; diff --git a/qface/idl/parser/T.tokens b/qface/idl/parser/T.tokens new file mode 100644 index 0000000..505f1e4 --- /dev/null +++ b/qface/idl/parser/T.tokens @@ -0,0 +1,58 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +INTCONSTANT=26 +HEXCONSTANT=27 +IDENTIFIER=28 +VERSION=29 +DOCCOMMENT=30 +WHITESPACE=31 +COMMENT=32 +MULTICOMM=33 +'import'=1 +';'=2 +'module'=3 +'interface'=4 +'{'=5 +'}'=6 +'event'=7 +'void'=8 +'('=9 +')'=10 +'readonly'=11 +','=12 +'bool'=13 +'int'=14 +'real'=15 +'string'=16 +'var'=17 +'list'=18 +'<'=19 +'>'=20 +'model'=21 +'struct'=22 +'enum'=23 +'flag'=24 +'='=25 diff --git a/qface/idl/parser/TLexer.py b/qface/idl/parser/TLexer.py new file mode 100644 index 0000000..643b680 --- /dev/null +++ b/qface/idl/parser/TLexer.py @@ -0,0 +1,185 @@ +# Generated from T.g4 by ANTLR 4.5.3 +from antlr4 import * +from io import StringIO + + +def serializedATN(): + with StringIO() as buf: + buf.write("\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2#") + buf.write("\u0100\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") + buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") + buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") + buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") + buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\3\2\3\2\3\2\3\2\3") + buf.write("\2\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5") + buf.write("\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3") + buf.write("\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\13\3") + buf.write("\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\16\3") + buf.write("\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20") + buf.write("\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22") + buf.write("\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31") + buf.write("\3\31\3\32\3\32\3\33\5\33\u00ba\n\33\3\33\6\33\u00bd\n") + buf.write("\33\r\33\16\33\u00be\3\34\3\34\3\34\3\34\6\34\u00c5\n") + buf.write("\34\r\34\16\34\u00c6\3\35\3\35\7\35\u00cb\n\35\f\35\16") + buf.write("\35\u00ce\13\35\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37") + buf.write("\3\37\7\37\u00d9\n\37\f\37\16\37\u00dc\13\37\3\37\3\37") + buf.write("\3\37\3 \6 \u00e2\n \r \16 \u00e3\3 \3 \3!\3!\3!\3!\7") + buf.write("!\u00ec\n!\f!\16!\u00ef\13!\3!\3!\3\"\3\"\3\"\3\"\7\"") + buf.write("\u00f7\n\"\f\"\16\"\u00fa\13\"\3\"\3\"\3\"\3\"\3\"\4\u00da") + buf.write("\u00f8\2#\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25") + buf.write("\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+") + buf.write("\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#\3") + buf.write("\2\t\4\2--//\5\2\62;CHch\5\2C\\aac|\b\2\60\60\62;C\\^") + buf.write("^aac|\3\2\62;\5\2\13\f\17\17\"\"\4\2\f\f\17\17\u0107\2") + buf.write("\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3") + buf.write("\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2") + buf.write("\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2") + buf.write("\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%") + buf.write("\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") + buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") + buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") + buf.write("A\3\2\2\2\2C\3\2\2\2\3E\3\2\2\2\5L\3\2\2\2\7N\3\2\2\2") + buf.write("\tU\3\2\2\2\13_\3\2\2\2\ra\3\2\2\2\17c\3\2\2\2\21i\3\2") + buf.write("\2\2\23n\3\2\2\2\25p\3\2\2\2\27r\3\2\2\2\31{\3\2\2\2\33") + buf.write("}\3\2\2\2\35\u0082\3\2\2\2\37\u0086\3\2\2\2!\u008b\3\2") + buf.write("\2\2#\u0092\3\2\2\2%\u0096\3\2\2\2\'\u009b\3\2\2\2)\u009d") + buf.write("\3\2\2\2+\u009f\3\2\2\2-\u00a5\3\2\2\2/\u00ac\3\2\2\2") + buf.write("\61\u00b1\3\2\2\2\63\u00b6\3\2\2\2\65\u00b9\3\2\2\2\67") + buf.write("\u00c0\3\2\2\29\u00c8\3\2\2\2;\u00cf\3\2\2\2=\u00d3\3") + buf.write("\2\2\2?\u00e1\3\2\2\2A\u00e7\3\2\2\2C\u00f2\3\2\2\2EF") + buf.write("\7k\2\2FG\7o\2\2GH\7r\2\2HI\7q\2\2IJ\7t\2\2JK\7v\2\2K") + buf.write("\4\3\2\2\2LM\7=\2\2M\6\3\2\2\2NO\7o\2\2OP\7q\2\2PQ\7f") + buf.write("\2\2QR\7w\2\2RS\7n\2\2ST\7g\2\2T\b\3\2\2\2UV\7k\2\2VW") + buf.write("\7p\2\2WX\7v\2\2XY\7g\2\2YZ\7t\2\2Z[\7h\2\2[\\\7c\2\2") + buf.write("\\]\7e\2\2]^\7g\2\2^\n\3\2\2\2_`\7}\2\2`\f\3\2\2\2ab\7") + buf.write("\177\2\2b\16\3\2\2\2cd\7g\2\2de\7x\2\2ef\7g\2\2fg\7p\2") + buf.write("\2gh\7v\2\2h\20\3\2\2\2ij\7x\2\2jk\7q\2\2kl\7k\2\2lm\7") + buf.write("f\2\2m\22\3\2\2\2no\7*\2\2o\24\3\2\2\2pq\7+\2\2q\26\3") + buf.write("\2\2\2rs\7t\2\2st\7g\2\2tu\7c\2\2uv\7f\2\2vw\7q\2\2wx") + buf.write("\7p\2\2xy\7n\2\2yz\7{\2\2z\30\3\2\2\2{|\7.\2\2|\32\3\2") + buf.write("\2\2}~\7d\2\2~\177\7q\2\2\177\u0080\7q\2\2\u0080\u0081") + buf.write("\7n\2\2\u0081\34\3\2\2\2\u0082\u0083\7k\2\2\u0083\u0084") + buf.write("\7p\2\2\u0084\u0085\7v\2\2\u0085\36\3\2\2\2\u0086\u0087") + buf.write("\7t\2\2\u0087\u0088\7g\2\2\u0088\u0089\7c\2\2\u0089\u008a") + buf.write("\7n\2\2\u008a \3\2\2\2\u008b\u008c\7u\2\2\u008c\u008d") + buf.write("\7v\2\2\u008d\u008e\7t\2\2\u008e\u008f\7k\2\2\u008f\u0090") + buf.write("\7p\2\2\u0090\u0091\7i\2\2\u0091\"\3\2\2\2\u0092\u0093") + buf.write("\7x\2\2\u0093\u0094\7c\2\2\u0094\u0095\7t\2\2\u0095$\3") + buf.write("\2\2\2\u0096\u0097\7n\2\2\u0097\u0098\7k\2\2\u0098\u0099") + buf.write("\7u\2\2\u0099\u009a\7v\2\2\u009a&\3\2\2\2\u009b\u009c") + buf.write("\7>\2\2\u009c(\3\2\2\2\u009d\u009e\7@\2\2\u009e*\3\2\2") + buf.write("\2\u009f\u00a0\7o\2\2\u00a0\u00a1\7q\2\2\u00a1\u00a2\7") + buf.write("f\2\2\u00a2\u00a3\7g\2\2\u00a3\u00a4\7n\2\2\u00a4,\3\2") + buf.write("\2\2\u00a5\u00a6\7u\2\2\u00a6\u00a7\7v\2\2\u00a7\u00a8") + buf.write("\7t\2\2\u00a8\u00a9\7w\2\2\u00a9\u00aa\7e\2\2\u00aa\u00ab") + buf.write("\7v\2\2\u00ab.\3\2\2\2\u00ac\u00ad\7g\2\2\u00ad\u00ae") + buf.write("\7p\2\2\u00ae\u00af\7w\2\2\u00af\u00b0\7o\2\2\u00b0\60") + buf.write("\3\2\2\2\u00b1\u00b2\7h\2\2\u00b2\u00b3\7n\2\2\u00b3\u00b4") + buf.write("\7c\2\2\u00b4\u00b5\7i\2\2\u00b5\62\3\2\2\2\u00b6\u00b7") + buf.write("\7?\2\2\u00b7\64\3\2\2\2\u00b8\u00ba\t\2\2\2\u00b9\u00b8") + buf.write("\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00bc\3\2\2\2\u00bb") + buf.write("\u00bd\4\62;\2\u00bc\u00bb\3\2\2\2\u00bd\u00be\3\2\2\2") + buf.write("\u00be\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\66\3\2") + buf.write("\2\2\u00c0\u00c1\7\62\2\2\u00c1\u00c2\7z\2\2\u00c2\u00c4") + buf.write("\3\2\2\2\u00c3\u00c5\t\3\2\2\u00c4\u00c3\3\2\2\2\u00c5") + buf.write("\u00c6\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2") + buf.write("\u00c78\3\2\2\2\u00c8\u00cc\t\4\2\2\u00c9\u00cb\t\5\2") + buf.write("\2\u00ca\u00c9\3\2\2\2\u00cb\u00ce\3\2\2\2\u00cc\u00ca") + buf.write("\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd:\3\2\2\2\u00ce\u00cc") + buf.write("\3\2\2\2\u00cf\u00d0\t\6\2\2\u00d0\u00d1\7\60\2\2\u00d1") + buf.write("\u00d2\t\6\2\2\u00d2<\3\2\2\2\u00d3\u00d4\7\61\2\2\u00d4") + buf.write("\u00d5\7,\2\2\u00d5\u00d6\7#\2\2\u00d6\u00da\3\2\2\2\u00d7") + buf.write("\u00d9\13\2\2\2\u00d8\u00d7\3\2\2\2\u00d9\u00dc\3\2\2") + buf.write("\2\u00da\u00db\3\2\2\2\u00da\u00d8\3\2\2\2\u00db\u00dd") + buf.write("\3\2\2\2\u00dc\u00da\3\2\2\2\u00dd\u00de\7,\2\2\u00de") + buf.write("\u00df\7\61\2\2\u00df>\3\2\2\2\u00e0\u00e2\t\7\2\2\u00e1") + buf.write("\u00e0\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e1\3\2\2\2") + buf.write("\u00e3\u00e4\3\2\2\2\u00e4\u00e5\3\2\2\2\u00e5\u00e6\b") + buf.write(" \2\2\u00e6@\3\2\2\2\u00e7\u00e8\7\61\2\2\u00e8\u00e9") + buf.write("\7\61\2\2\u00e9\u00ed\3\2\2\2\u00ea\u00ec\n\b\2\2\u00eb") + buf.write("\u00ea\3\2\2\2\u00ec\u00ef\3\2\2\2\u00ed\u00eb\3\2\2\2") + buf.write("\u00ed\u00ee\3\2\2\2\u00ee\u00f0\3\2\2\2\u00ef\u00ed\3") + buf.write("\2\2\2\u00f0\u00f1\b!\2\2\u00f1B\3\2\2\2\u00f2\u00f3\7") + buf.write("\61\2\2\u00f3\u00f4\7,\2\2\u00f4\u00f8\3\2\2\2\u00f5\u00f7") + buf.write("\13\2\2\2\u00f6\u00f5\3\2\2\2\u00f7\u00fa\3\2\2\2\u00f8") + buf.write("\u00f9\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f9\u00fb\3\2\2\2") + buf.write("\u00fa\u00f8\3\2\2\2\u00fb\u00fc\7,\2\2\u00fc\u00fd\7") + buf.write("\61\2\2\u00fd\u00fe\3\2\2\2\u00fe\u00ff\b\"\2\2\u00ff") + buf.write("D\3\2\2\2\13\2\u00b9\u00be\u00c6\u00cc\u00da\u00e3\u00ed") + buf.write("\u00f8\3\b\2\2") + return buf.getvalue() + + +class TLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + + T__0 = 1 + T__1 = 2 + T__2 = 3 + T__3 = 4 + T__4 = 5 + T__5 = 6 + T__6 = 7 + T__7 = 8 + T__8 = 9 + T__9 = 10 + T__10 = 11 + T__11 = 12 + T__12 = 13 + T__13 = 14 + T__14 = 15 + T__15 = 16 + T__16 = 17 + T__17 = 18 + T__18 = 19 + T__19 = 20 + T__20 = 21 + T__21 = 22 + T__22 = 23 + T__23 = 24 + T__24 = 25 + INTCONSTANT = 26 + HEXCONSTANT = 27 + IDENTIFIER = 28 + VERSION = 29 + DOCCOMMENT = 30 + WHITESPACE = 31 + COMMENT = 32 + MULTICOMM = 33 + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "<INVALID>", + "'import'", "';'", "'module'", "'interface'", "'{'", "'}'", + "'event'", "'void'", "'('", "')'", "'readonly'", "','", "'bool'", + "'int'", "'real'", "'string'", "'var'", "'list'", "'<'", "'>'", + "'model'", "'struct'", "'enum'", "'flag'", "'='" ] + + symbolicNames = [ "<INVALID>", + "INTCONSTANT", "HEXCONSTANT", "IDENTIFIER", "VERSION", "DOCCOMMENT", + "WHITESPACE", "COMMENT", "MULTICOMM" ] + + ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", + "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", + "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", + "T__20", "T__21", "T__22", "T__23", "T__24", "INTCONSTANT", + "HEXCONSTANT", "IDENTIFIER", "VERSION", "DOCCOMMENT", + "WHITESPACE", "COMMENT", "MULTICOMM" ] + + grammarFileName = "T.g4" + + def __init__(self, input=None): + super().__init__(input) + self.checkVersion("4.5.3") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/qface/idl/parser/TLexer.tokens b/qface/idl/parser/TLexer.tokens new file mode 100644 index 0000000..505f1e4 --- /dev/null +++ b/qface/idl/parser/TLexer.tokens @@ -0,0 +1,58 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +INTCONSTANT=26 +HEXCONSTANT=27 +IDENTIFIER=28 +VERSION=29 +DOCCOMMENT=30 +WHITESPACE=31 +COMMENT=32 +MULTICOMM=33 +'import'=1 +';'=2 +'module'=3 +'interface'=4 +'{'=5 +'}'=6 +'event'=7 +'void'=8 +'('=9 +')'=10 +'readonly'=11 +','=12 +'bool'=13 +'int'=14 +'real'=15 +'string'=16 +'var'=17 +'list'=18 +'<'=19 +'>'=20 +'model'=21 +'struct'=22 +'enum'=23 +'flag'=24 +'='=25 diff --git a/qface/idl/parser/TListener.py b/qface/idl/parser/TListener.py new file mode 100644 index 0000000..10f5a3a --- /dev/null +++ b/qface/idl/parser/TListener.py @@ -0,0 +1,199 @@ +# Generated from T.g4 by ANTLR 4.5.3 +from antlr4 import * +if __name__ is not None and "." in __name__: + from .TParser import TParser +else: + from TParser import TParser + +# This class defines a complete listener for a parse tree produced by TParser. +class TListener(ParseTreeListener): + + # Enter a parse tree produced by TParser#documentSymbol. + def enterDocumentSymbol(self, ctx:TParser.DocumentSymbolContext): + pass + + # Exit a parse tree produced by TParser#documentSymbol. + def exitDocumentSymbol(self, ctx:TParser.DocumentSymbolContext): + pass + + + # Enter a parse tree produced by TParser#headerSymbol. + def enterHeaderSymbol(self, ctx:TParser.HeaderSymbolContext): + pass + + # Exit a parse tree produced by TParser#headerSymbol. + def exitHeaderSymbol(self, ctx:TParser.HeaderSymbolContext): + pass + + + # Enter a parse tree produced by TParser#importSymbol. + def enterImportSymbol(self, ctx:TParser.ImportSymbolContext): + pass + + # Exit a parse tree produced by TParser#importSymbol. + def exitImportSymbol(self, ctx:TParser.ImportSymbolContext): + pass + + + # Enter a parse tree produced by TParser#moduleSymbol. + def enterModuleSymbol(self, ctx:TParser.ModuleSymbolContext): + pass + + # Exit a parse tree produced by TParser#moduleSymbol. + def exitModuleSymbol(self, ctx:TParser.ModuleSymbolContext): + pass + + + # Enter a parse tree produced by TParser#definitionSymbol. + def enterDefinitionSymbol(self, ctx:TParser.DefinitionSymbolContext): + pass + + # Exit a parse tree produced by TParser#definitionSymbol. + def exitDefinitionSymbol(self, ctx:TParser.DefinitionSymbolContext): + pass + + + # Enter a parse tree produced by TParser#interfaceSymbol. + def enterInterfaceSymbol(self, ctx:TParser.InterfaceSymbolContext): + pass + + # Exit a parse tree produced by TParser#interfaceSymbol. + def exitInterfaceSymbol(self, ctx:TParser.InterfaceSymbolContext): + pass + + + # Enter a parse tree produced by TParser#interfaceMemberSymbol. + def enterInterfaceMemberSymbol(self, ctx:TParser.InterfaceMemberSymbolContext): + pass + + # Exit a parse tree produced by TParser#interfaceMemberSymbol. + def exitInterfaceMemberSymbol(self, ctx:TParser.InterfaceMemberSymbolContext): + pass + + + # Enter a parse tree produced by TParser#operationSymbol. + def enterOperationSymbol(self, ctx:TParser.OperationSymbolContext): + pass + + # Exit a parse tree produced by TParser#operationSymbol. + def exitOperationSymbol(self, ctx:TParser.OperationSymbolContext): + pass + + + # Enter a parse tree produced by TParser#propertySymbol. + def enterPropertySymbol(self, ctx:TParser.PropertySymbolContext): + pass + + # Exit a parse tree produced by TParser#propertySymbol. + def exitPropertySymbol(self, ctx:TParser.PropertySymbolContext): + pass + + + # Enter a parse tree produced by TParser#operationParameterSymbol. + def enterOperationParameterSymbol(self, ctx:TParser.OperationParameterSymbolContext): + pass + + # Exit a parse tree produced by TParser#operationParameterSymbol. + def exitOperationParameterSymbol(self, ctx:TParser.OperationParameterSymbolContext): + pass + + + # Enter a parse tree produced by TParser#typeSymbol. + def enterTypeSymbol(self, ctx:TParser.TypeSymbolContext): + pass + + # Exit a parse tree produced by TParser#typeSymbol. + def exitTypeSymbol(self, ctx:TParser.TypeSymbolContext): + pass + + + # Enter a parse tree produced by TParser#complexTypeSymbol. + def enterComplexTypeSymbol(self, ctx:TParser.ComplexTypeSymbolContext): + pass + + # Exit a parse tree produced by TParser#complexTypeSymbol. + def exitComplexTypeSymbol(self, ctx:TParser.ComplexTypeSymbolContext): + pass + + + # Enter a parse tree produced by TParser#primitiveTypeSymbol. + def enterPrimitiveTypeSymbol(self, ctx:TParser.PrimitiveTypeSymbolContext): + pass + + # Exit a parse tree produced by TParser#primitiveTypeSymbol. + def exitPrimitiveTypeSymbol(self, ctx:TParser.PrimitiveTypeSymbolContext): + pass + + + # Enter a parse tree produced by TParser#listTypeSymbol. + def enterListTypeSymbol(self, ctx:TParser.ListTypeSymbolContext): + pass + + # Exit a parse tree produced by TParser#listTypeSymbol. + def exitListTypeSymbol(self, ctx:TParser.ListTypeSymbolContext): + pass + + + # Enter a parse tree produced by TParser#modelTypeSymbol. + def enterModelTypeSymbol(self, ctx:TParser.ModelTypeSymbolContext): + pass + + # Exit a parse tree produced by TParser#modelTypeSymbol. + def exitModelTypeSymbol(self, ctx:TParser.ModelTypeSymbolContext): + pass + + + # Enter a parse tree produced by TParser#structSymbol. + def enterStructSymbol(self, ctx:TParser.StructSymbolContext): + pass + + # Exit a parse tree produced by TParser#structSymbol. + def exitStructSymbol(self, ctx:TParser.StructSymbolContext): + pass + + + # Enter a parse tree produced by TParser#structFieldSymbol. + def enterStructFieldSymbol(self, ctx:TParser.StructFieldSymbolContext): + pass + + # Exit a parse tree produced by TParser#structFieldSymbol. + def exitStructFieldSymbol(self, ctx:TParser.StructFieldSymbolContext): + pass + + + # Enter a parse tree produced by TParser#enumSymbol. + def enterEnumSymbol(self, ctx:TParser.EnumSymbolContext): + pass + + # Exit a parse tree produced by TParser#enumSymbol. + def exitEnumSymbol(self, ctx:TParser.EnumSymbolContext): + pass + + + # Enter a parse tree produced by TParser#enumTypeSymbol. + def enterEnumTypeSymbol(self, ctx:TParser.EnumTypeSymbolContext): + pass + + # Exit a parse tree produced by TParser#enumTypeSymbol. + def exitEnumTypeSymbol(self, ctx:TParser.EnumTypeSymbolContext): + pass + + + # Enter a parse tree produced by TParser#enumMemberSymbol. + def enterEnumMemberSymbol(self, ctx:TParser.EnumMemberSymbolContext): + pass + + # Exit a parse tree produced by TParser#enumMemberSymbol. + def exitEnumMemberSymbol(self, ctx:TParser.EnumMemberSymbolContext): + pass + + + # Enter a parse tree produced by TParser#intSymbol. + def enterIntSymbol(self, ctx:TParser.IntSymbolContext): + pass + + # Exit a parse tree produced by TParser#intSymbol. + def exitIntSymbol(self, ctx:TParser.IntSymbolContext): + pass + + diff --git a/qface/idl/parser/TParser.py b/qface/idl/parser/TParser.py new file mode 100644 index 0000000..a1b0c4e --- /dev/null +++ b/qface/idl/parser/TParser.py @@ -0,0 +1,1669 @@ +# Generated from T.g4 by ANTLR 4.5.3 +# encoding: utf-8 +from antlr4 import * +from io import StringIO + +def serializedATN(): + with StringIO() as buf: + buf.write("\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3#") + buf.write("\u00d7\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") + buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") + buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\3\2\3\2\7\2/\n\2\f\2\16") + buf.write("\2\62\13\2\3\3\3\3\7\3\66\n\3\f\3\16\39\13\3\3\4\3\4\3") + buf.write("\4\3\4\5\4?\n\4\3\5\5\5B\n\5\3\5\3\5\3\5\3\5\5\5H\n\5") + buf.write("\3\6\3\6\3\6\5\6M\n\6\3\7\5\7P\n\7\3\7\3\7\3\7\3\7\7\7") + buf.write("V\n\7\f\7\16\7Y\13\7\3\7\3\7\3\b\3\b\5\b_\n\b\3\t\5\t") + buf.write("b\n\t\3\t\5\te\n\t\3\t\3\t\5\ti\n\t\3\t\3\t\3\t\7\tn\n") + buf.write("\t\f\t\16\tq\13\t\3\t\3\t\5\tu\n\t\3\n\5\nx\n\n\3\n\5") + buf.write("\n{\n\n\3\n\3\n\3\n\5\n\u0080\n\n\3\13\3\13\3\13\5\13") + buf.write("\u0085\n\13\3\f\3\f\3\f\3\f\5\f\u008b\n\f\3\r\3\r\3\16") + buf.write("\3\16\3\16\3\16\3\16\5\16\u0094\n\16\3\17\3\17\3\17\3") + buf.write("\17\3\17\3\20\3\20\3\20\3\20\3\20\3\21\5\21\u00a1\n\21") + buf.write("\3\21\3\21\3\21\3\21\7\21\u00a7\n\21\f\21\16\21\u00aa") + buf.write("\13\21\3\21\3\21\3\22\5\22\u00af\n\22\3\22\3\22\3\22\5") + buf.write("\22\u00b4\n\22\3\23\5\23\u00b7\n\23\3\23\3\23\3\23\3\23") + buf.write("\7\23\u00bd\n\23\f\23\16\23\u00c0\13\23\3\23\3\23\3\24") + buf.write("\3\24\5\24\u00c6\n\24\3\25\5\25\u00c9\n\25\3\25\3\25\3") + buf.write("\25\5\25\u00ce\n\25\3\25\5\25\u00d1\n\25\3\26\3\26\5\26") + buf.write("\u00d5\n\26\3\26\2\2\27\2\4\6\b\n\f\16\20\22\24\26\30") + buf.write("\32\34\36 \"$&(*\2\2\u00e6\2,\3\2\2\2\4\63\3\2\2\2\6:") + buf.write("\3\2\2\2\bA\3\2\2\2\nL\3\2\2\2\fO\3\2\2\2\16^\3\2\2\2") + buf.write("\20a\3\2\2\2\22w\3\2\2\2\24\u0081\3\2\2\2\26\u008a\3\2") + buf.write("\2\2\30\u008c\3\2\2\2\32\u0093\3\2\2\2\34\u0095\3\2\2") + buf.write("\2\36\u009a\3\2\2\2 \u00a0\3\2\2\2\"\u00ae\3\2\2\2$\u00b6") + buf.write("\3\2\2\2&\u00c5\3\2\2\2(\u00c8\3\2\2\2*\u00d4\3\2\2\2") + buf.write(",\60\5\4\3\2-/\5\n\6\2.-\3\2\2\2/\62\3\2\2\2\60.\3\2\2") + buf.write("\2\60\61\3\2\2\2\61\3\3\2\2\2\62\60\3\2\2\2\63\67\5\b") + buf.write("\5\2\64\66\5\6\4\2\65\64\3\2\2\2\669\3\2\2\2\67\65\3\2") + buf.write("\2\2\678\3\2\2\28\5\3\2\2\29\67\3\2\2\2:;\7\3\2\2;<\7") + buf.write("\36\2\2<>\7\37\2\2=?\7\4\2\2>=\3\2\2\2>?\3\2\2\2?\7\3") + buf.write("\2\2\2@B\7 \2\2A@\3\2\2\2AB\3\2\2\2BC\3\2\2\2CD\7\5\2") + buf.write("\2DE\7\36\2\2EG\7\37\2\2FH\7\4\2\2GF\3\2\2\2GH\3\2\2\2") + buf.write("H\t\3\2\2\2IM\5\f\7\2JM\5 \21\2KM\5$\23\2LI\3\2\2\2LJ") + buf.write("\3\2\2\2LK\3\2\2\2M\13\3\2\2\2NP\7 \2\2ON\3\2\2\2OP\3") + buf.write("\2\2\2PQ\3\2\2\2QR\7\6\2\2RS\7\36\2\2SW\7\7\2\2TV\5\16") + buf.write("\b\2UT\3\2\2\2VY\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2") + buf.write("YW\3\2\2\2Z[\7\b\2\2[\r\3\2\2\2\\_\5\20\t\2]_\5\22\n\2") + buf.write("^\\\3\2\2\2^]\3\2\2\2_\17\3\2\2\2`b\7 \2\2a`\3\2\2\2a") + buf.write("b\3\2\2\2bd\3\2\2\2ce\7\t\2\2dc\3\2\2\2de\3\2\2\2eh\3") + buf.write("\2\2\2fi\5\26\f\2gi\7\n\2\2hf\3\2\2\2hg\3\2\2\2ij\3\2") + buf.write("\2\2jk\7\36\2\2ko\7\13\2\2ln\5\24\13\2ml\3\2\2\2nq\3\2") + buf.write("\2\2om\3\2\2\2op\3\2\2\2pr\3\2\2\2qo\3\2\2\2rt\7\f\2\2") + buf.write("su\7\4\2\2ts\3\2\2\2tu\3\2\2\2u\21\3\2\2\2vx\7 \2\2wv") + buf.write("\3\2\2\2wx\3\2\2\2xz\3\2\2\2y{\7\r\2\2zy\3\2\2\2z{\3\2") + buf.write("\2\2{|\3\2\2\2|}\5\26\f\2}\177\7\36\2\2~\u0080\7\4\2\2") + buf.write("\177~\3\2\2\2\177\u0080\3\2\2\2\u0080\23\3\2\2\2\u0081") + buf.write("\u0082\5\26\f\2\u0082\u0084\7\36\2\2\u0083\u0085\7\16") + buf.write("\2\2\u0084\u0083\3\2\2\2\u0084\u0085\3\2\2\2\u0085\25") + buf.write("\3\2\2\2\u0086\u008b\5\32\16\2\u0087\u008b\5\30\r\2\u0088") + buf.write("\u008b\5\34\17\2\u0089\u008b\5\36\20\2\u008a\u0086\3\2") + buf.write("\2\2\u008a\u0087\3\2\2\2\u008a\u0088\3\2\2\2\u008a\u0089") + buf.write("\3\2\2\2\u008b\27\3\2\2\2\u008c\u008d\7\36\2\2\u008d\31") + buf.write("\3\2\2\2\u008e\u0094\7\17\2\2\u008f\u0094\7\20\2\2\u0090") + buf.write("\u0094\7\21\2\2\u0091\u0094\7\22\2\2\u0092\u0094\7\23") + buf.write("\2\2\u0093\u008e\3\2\2\2\u0093\u008f\3\2\2\2\u0093\u0090") + buf.write("\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0092\3\2\2\2\u0094") + buf.write("\33\3\2\2\2\u0095\u0096\7\24\2\2\u0096\u0097\7\25\2\2") + buf.write("\u0097\u0098\5\26\f\2\u0098\u0099\7\26\2\2\u0099\35\3") + buf.write("\2\2\2\u009a\u009b\7\27\2\2\u009b\u009c\7\25\2\2\u009c") + buf.write("\u009d\5\26\f\2\u009d\u009e\7\26\2\2\u009e\37\3\2\2\2") + buf.write("\u009f\u00a1\7 \2\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3") + buf.write("\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a3\7\30\2\2\u00a3") + buf.write("\u00a4\7\36\2\2\u00a4\u00a8\7\7\2\2\u00a5\u00a7\5\"\22") + buf.write("\2\u00a6\u00a5\3\2\2\2\u00a7\u00aa\3\2\2\2\u00a8\u00a6") + buf.write("\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00ab\3\2\2\2\u00aa") + buf.write("\u00a8\3\2\2\2\u00ab\u00ac\7\b\2\2\u00ac!\3\2\2\2\u00ad") + buf.write("\u00af\7 \2\2\u00ae\u00ad\3\2\2\2\u00ae\u00af\3\2\2\2") + buf.write("\u00af\u00b0\3\2\2\2\u00b0\u00b1\5\26\f\2\u00b1\u00b3") + buf.write("\7\36\2\2\u00b2\u00b4\7\4\2\2\u00b3\u00b2\3\2\2\2\u00b3") + buf.write("\u00b4\3\2\2\2\u00b4#\3\2\2\2\u00b5\u00b7\7 \2\2\u00b6") + buf.write("\u00b5\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b8\3\2\2\2") + buf.write("\u00b8\u00b9\5&\24\2\u00b9\u00ba\7\36\2\2\u00ba\u00be") + buf.write("\7\7\2\2\u00bb\u00bd\5(\25\2\u00bc\u00bb\3\2\2\2\u00bd") + buf.write("\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2") + buf.write("\u00bf\u00c1\3\2\2\2\u00c0\u00be\3\2\2\2\u00c1\u00c2\7") + buf.write("\b\2\2\u00c2%\3\2\2\2\u00c3\u00c6\7\31\2\2\u00c4\u00c6") + buf.write("\7\32\2\2\u00c5\u00c3\3\2\2\2\u00c5\u00c4\3\2\2\2\u00c6") + buf.write("\'\3\2\2\2\u00c7\u00c9\7 \2\2\u00c8\u00c7\3\2\2\2\u00c8") + buf.write("\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cd\7\36\2") + buf.write("\2\u00cb\u00cc\7\33\2\2\u00cc\u00ce\5*\26\2\u00cd\u00cb") + buf.write("\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d0\3\2\2\2\u00cf") + buf.write("\u00d1\7\16\2\2\u00d0\u00cf\3\2\2\2\u00d0\u00d1\3\2\2") + buf.write("\2\u00d1)\3\2\2\2\u00d2\u00d5\7\34\2\2\u00d3\u00d5\7\35") + buf.write("\2\2\u00d4\u00d2\3\2\2\2\u00d4\u00d3\3\2\2\2\u00d5+\3") + buf.write("\2\2\2!\60\67>AGLOW^adhotwz\177\u0084\u008a\u0093\u00a0") + buf.write("\u00a8\u00ae\u00b3\u00b6\u00be\u00c5\u00c8\u00cd\u00d0") + buf.write("\u00d4") + return buf.getvalue() + + +class TParser ( Parser ): + + grammarFileName = "T.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "<INVALID>", "'import'", "';'", "'module'", "'interface'", + "'{'", "'}'", "'event'", "'void'", "'('", "')'", "'readonly'", + "','", "'bool'", "'int'", "'real'", "'string'", "'var'", + "'list'", "'<'", "'>'", "'model'", "'struct'", "'enum'", + "'flag'", "'='" ] + + symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "INTCONSTANT", "HEXCONSTANT", + "IDENTIFIER", "VERSION", "DOCCOMMENT", "WHITESPACE", + "COMMENT", "MULTICOMM" ] + + RULE_documentSymbol = 0 + RULE_headerSymbol = 1 + RULE_importSymbol = 2 + RULE_moduleSymbol = 3 + RULE_definitionSymbol = 4 + RULE_interfaceSymbol = 5 + RULE_interfaceMemberSymbol = 6 + RULE_operationSymbol = 7 + RULE_propertySymbol = 8 + RULE_operationParameterSymbol = 9 + RULE_typeSymbol = 10 + RULE_complexTypeSymbol = 11 + RULE_primitiveTypeSymbol = 12 + RULE_listTypeSymbol = 13 + RULE_modelTypeSymbol = 14 + RULE_structSymbol = 15 + RULE_structFieldSymbol = 16 + RULE_enumSymbol = 17 + RULE_enumTypeSymbol = 18 + RULE_enumMemberSymbol = 19 + RULE_intSymbol = 20 + + ruleNames = [ "documentSymbol", "headerSymbol", "importSymbol", "moduleSymbol", + "definitionSymbol", "interfaceSymbol", "interfaceMemberSymbol", + "operationSymbol", "propertySymbol", "operationParameterSymbol", + "typeSymbol", "complexTypeSymbol", "primitiveTypeSymbol", + "listTypeSymbol", "modelTypeSymbol", "structSymbol", + "structFieldSymbol", "enumSymbol", "enumTypeSymbol", + "enumMemberSymbol", "intSymbol" ] + + EOF = Token.EOF + T__0=1 + T__1=2 + T__2=3 + T__3=4 + T__4=5 + T__5=6 + T__6=7 + T__7=8 + T__8=9 + T__9=10 + T__10=11 + T__11=12 + T__12=13 + T__13=14 + T__14=15 + T__15=16 + T__16=17 + T__17=18 + T__18=19 + T__19=20 + T__20=21 + T__21=22 + T__22=23 + T__23=24 + T__24=25 + INTCONSTANT=26 + HEXCONSTANT=27 + IDENTIFIER=28 + VERSION=29 + DOCCOMMENT=30 + WHITESPACE=31 + COMMENT=32 + MULTICOMM=33 + + def __init__(self, input:TokenStream): + super().__init__(input) + self.checkVersion("4.5.3") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + class DocumentSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def headerSymbol(self): + return self.getTypedRuleContext(TParser.HeaderSymbolContext,0) + + + def definitionSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.DefinitionSymbolContext) + else: + return self.getTypedRuleContext(TParser.DefinitionSymbolContext,i) + + + def getRuleIndex(self): + return TParser.RULE_documentSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDocumentSymbol" ): + listener.enterDocumentSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDocumentSymbol" ): + listener.exitDocumentSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDocumentSymbol" ): + return visitor.visitDocumentSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def documentSymbol(self): + + localctx = TParser.DocumentSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_documentSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 42 + self.headerSymbol() + self.state = 46 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__3) | (1 << TParser.T__21) | (1 << TParser.T__22) | (1 << TParser.T__23) | (1 << TParser.DOCCOMMENT))) != 0): + self.state = 43 + self.definitionSymbol() + self.state = 48 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class HeaderSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def moduleSymbol(self): + return self.getTypedRuleContext(TParser.ModuleSymbolContext,0) + + + def importSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.ImportSymbolContext) + else: + return self.getTypedRuleContext(TParser.ImportSymbolContext,i) + + + def getRuleIndex(self): + return TParser.RULE_headerSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterHeaderSymbol" ): + listener.enterHeaderSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitHeaderSymbol" ): + listener.exitHeaderSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitHeaderSymbol" ): + return visitor.visitHeaderSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def headerSymbol(self): + + localctx = TParser.HeaderSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_headerSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 49 + self.moduleSymbol() + self.state = 53 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==TParser.T__0: + self.state = 50 + self.importSymbol() + self.state = 55 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ImportSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.name = None # Token + self.version = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def VERSION(self): + return self.getToken(TParser.VERSION, 0) + + def getRuleIndex(self): + return TParser.RULE_importSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportSymbol" ): + listener.enterImportSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportSymbol" ): + listener.exitImportSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitImportSymbol" ): + return visitor.visitImportSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def importSymbol(self): + + localctx = TParser.ImportSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_importSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 56 + self.match(TParser.T__0) + self.state = 57 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 58 + localctx.version = self.match(TParser.VERSION) + self.state = 60 + _la = self._input.LA(1) + if _la==TParser.T__1: + self.state = 59 + self.match(TParser.T__1) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ModuleSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.name = None # Token + self.version = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def VERSION(self): + return self.getToken(TParser.VERSION, 0) + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_moduleSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModuleSymbol" ): + listener.enterModuleSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModuleSymbol" ): + listener.exitModuleSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleSymbol" ): + return visitor.visitModuleSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def moduleSymbol(self): + + localctx = TParser.ModuleSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_moduleSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 63 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 62 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 65 + self.match(TParser.T__2) + self.state = 66 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 67 + localctx.version = self.match(TParser.VERSION) + self.state = 69 + _la = self._input.LA(1) + if _la==TParser.T__1: + self.state = 68 + self.match(TParser.T__1) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DefinitionSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def interfaceSymbol(self): + return self.getTypedRuleContext(TParser.InterfaceSymbolContext,0) + + + def structSymbol(self): + return self.getTypedRuleContext(TParser.StructSymbolContext,0) + + + def enumSymbol(self): + return self.getTypedRuleContext(TParser.EnumSymbolContext,0) + + + def getRuleIndex(self): + return TParser.RULE_definitionSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDefinitionSymbol" ): + listener.enterDefinitionSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDefinitionSymbol" ): + listener.exitDefinitionSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDefinitionSymbol" ): + return visitor.visitDefinitionSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def definitionSymbol(self): + + localctx = TParser.DefinitionSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_definitionSymbol) + try: + self.state = 74 + self._errHandler.sync(self); + la_ = self._interp.adaptivePredict(self._input,5,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 71 + self.interfaceSymbol() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 72 + self.structSymbol() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 73 + self.enumSymbol() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.name = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def interfaceMemberSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.InterfaceMemberSymbolContext) + else: + return self.getTypedRuleContext(TParser.InterfaceMemberSymbolContext,i) + + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_interfaceSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceSymbol" ): + listener.enterInterfaceSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceSymbol" ): + listener.exitInterfaceSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceSymbol" ): + return visitor.visitInterfaceSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceSymbol(self): + + localctx = TParser.InterfaceSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_interfaceSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 77 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 76 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 79 + self.match(TParser.T__3) + self.state = 80 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 81 + self.match(TParser.T__4) + self.state = 85 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__6) | (1 << TParser.T__7) | (1 << TParser.T__10) | (1 << TParser.T__12) | (1 << TParser.T__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__20) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): + self.state = 82 + self.interfaceMemberSymbol() + self.state = 87 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 88 + self.match(TParser.T__5) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceMemberSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def operationSymbol(self): + return self.getTypedRuleContext(TParser.OperationSymbolContext,0) + + + def propertySymbol(self): + return self.getTypedRuleContext(TParser.PropertySymbolContext,0) + + + def getRuleIndex(self): + return TParser.RULE_interfaceMemberSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceMemberSymbol" ): + listener.enterInterfaceMemberSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceMemberSymbol" ): + listener.exitInterfaceMemberSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMemberSymbol" ): + return visitor.visitInterfaceMemberSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMemberSymbol(self): + + localctx = TParser.InterfaceMemberSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_interfaceMemberSymbol) + try: + self.state = 92 + self._errHandler.sync(self); + la_ = self._interp.adaptivePredict(self._input,8,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 90 + self.operationSymbol() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 91 + self.propertySymbol() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class OperationSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.isEvent = None # Token + self.name = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def typeSymbol(self): + return self.getTypedRuleContext(TParser.TypeSymbolContext,0) + + + def operationParameterSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.OperationParameterSymbolContext) + else: + return self.getTypedRuleContext(TParser.OperationParameterSymbolContext,i) + + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_operationSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOperationSymbol" ): + listener.enterOperationSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOperationSymbol" ): + listener.exitOperationSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOperationSymbol" ): + return visitor.visitOperationSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def operationSymbol(self): + + localctx = TParser.OperationSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_operationSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 95 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 94 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 98 + _la = self._input.LA(1) + if _la==TParser.T__6: + self.state = 97 + localctx.isEvent = self.match(TParser.T__6) + + + self.state = 102 + token = self._input.LA(1) + if token in [TParser.T__12, TParser.T__13, TParser.T__14, TParser.T__15, TParser.T__16, TParser.T__17, TParser.T__20, TParser.IDENTIFIER]: + self.state = 100 + self.typeSymbol() + + elif token in [TParser.T__7]: + self.state = 101 + self.match(TParser.T__7) + + else: + raise NoViableAltException(self) + + self.state = 104 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 105 + self.match(TParser.T__8) + self.state = 109 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__12) | (1 << TParser.T__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__20) | (1 << TParser.IDENTIFIER))) != 0): + self.state = 106 + self.operationParameterSymbol() + self.state = 111 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 112 + self.match(TParser.T__9) + self.state = 114 + _la = self._input.LA(1) + if _la==TParser.T__1: + self.state = 113 + self.match(TParser.T__1) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PropertySymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.isReadOnly = None # Token + self.name = None # Token + + def typeSymbol(self): + return self.getTypedRuleContext(TParser.TypeSymbolContext,0) + + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_propertySymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPropertySymbol" ): + listener.enterPropertySymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPropertySymbol" ): + listener.exitPropertySymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPropertySymbol" ): + return visitor.visitPropertySymbol(self) + else: + return visitor.visitChildren(self) + + + + + def propertySymbol(self): + + localctx = TParser.PropertySymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_propertySymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 117 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 116 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 120 + _la = self._input.LA(1) + if _la==TParser.T__10: + self.state = 119 + localctx.isReadOnly = self.match(TParser.T__10) + + + self.state = 122 + self.typeSymbol() + self.state = 123 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 125 + _la = self._input.LA(1) + if _la==TParser.T__1: + self.state = 124 + self.match(TParser.T__1) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class OperationParameterSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.name = None # Token + + def typeSymbol(self): + return self.getTypedRuleContext(TParser.TypeSymbolContext,0) + + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def getRuleIndex(self): + return TParser.RULE_operationParameterSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOperationParameterSymbol" ): + listener.enterOperationParameterSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOperationParameterSymbol" ): + listener.exitOperationParameterSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOperationParameterSymbol" ): + return visitor.visitOperationParameterSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def operationParameterSymbol(self): + + localctx = TParser.OperationParameterSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_operationParameterSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 127 + self.typeSymbol() + self.state = 128 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 130 + _la = self._input.LA(1) + if _la==TParser.T__11: + self.state = 129 + self.match(TParser.T__11) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primitiveTypeSymbol(self): + return self.getTypedRuleContext(TParser.PrimitiveTypeSymbolContext,0) + + + def complexTypeSymbol(self): + return self.getTypedRuleContext(TParser.ComplexTypeSymbolContext,0) + + + def listTypeSymbol(self): + return self.getTypedRuleContext(TParser.ListTypeSymbolContext,0) + + + def modelTypeSymbol(self): + return self.getTypedRuleContext(TParser.ModelTypeSymbolContext,0) + + + def getRuleIndex(self): + return TParser.RULE_typeSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeSymbol" ): + listener.enterTypeSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeSymbol" ): + listener.exitTypeSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeSymbol" ): + return visitor.visitTypeSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def typeSymbol(self): + + localctx = TParser.TypeSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_typeSymbol) + try: + self.state = 136 + token = self._input.LA(1) + if token in [TParser.T__12, TParser.T__13, TParser.T__14, TParser.T__15, TParser.T__16]: + self.enterOuterAlt(localctx, 1) + self.state = 132 + self.primitiveTypeSymbol() + + elif token in [TParser.IDENTIFIER]: + self.enterOuterAlt(localctx, 2) + self.state = 133 + self.complexTypeSymbol() + + elif token in [TParser.T__17]: + self.enterOuterAlt(localctx, 3) + self.state = 134 + self.listTypeSymbol() + + elif token in [TParser.T__20]: + self.enterOuterAlt(localctx, 4) + self.state = 135 + self.modelTypeSymbol() + + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ComplexTypeSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.name = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def getRuleIndex(self): + return TParser.RULE_complexTypeSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterComplexTypeSymbol" ): + listener.enterComplexTypeSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitComplexTypeSymbol" ): + listener.exitComplexTypeSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitComplexTypeSymbol" ): + return visitor.visitComplexTypeSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def complexTypeSymbol(self): + + localctx = TParser.ComplexTypeSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_complexTypeSymbol) + try: + self.enterOuterAlt(localctx, 1) + self.state = 138 + localctx.name = self.match(TParser.IDENTIFIER) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PrimitiveTypeSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.name = None # Token + + + def getRuleIndex(self): + return TParser.RULE_primitiveTypeSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPrimitiveTypeSymbol" ): + listener.enterPrimitiveTypeSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPrimitiveTypeSymbol" ): + listener.exitPrimitiveTypeSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimitiveTypeSymbol" ): + return visitor.visitPrimitiveTypeSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def primitiveTypeSymbol(self): + + localctx = TParser.PrimitiveTypeSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_primitiveTypeSymbol) + try: + self.state = 145 + token = self._input.LA(1) + if token in [TParser.T__12]: + self.enterOuterAlt(localctx, 1) + self.state = 140 + localctx.name = self.match(TParser.T__12) + + elif token in [TParser.T__13]: + self.enterOuterAlt(localctx, 2) + self.state = 141 + localctx.name = self.match(TParser.T__13) + + elif token in [TParser.T__14]: + self.enterOuterAlt(localctx, 3) + self.state = 142 + localctx.name = self.match(TParser.T__14) + + elif token in [TParser.T__15]: + self.enterOuterAlt(localctx, 4) + self.state = 143 + localctx.name = self.match(TParser.T__15) + + elif token in [TParser.T__16]: + self.enterOuterAlt(localctx, 5) + self.state = 144 + localctx.name = self.match(TParser.T__16) + + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ListTypeSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.valueType = None # TypeSymbolContext + + def typeSymbol(self): + return self.getTypedRuleContext(TParser.TypeSymbolContext,0) + + + def getRuleIndex(self): + return TParser.RULE_listTypeSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterListTypeSymbol" ): + listener.enterListTypeSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitListTypeSymbol" ): + listener.exitListTypeSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitListTypeSymbol" ): + return visitor.visitListTypeSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def listTypeSymbol(self): + + localctx = TParser.ListTypeSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_listTypeSymbol) + try: + self.enterOuterAlt(localctx, 1) + self.state = 147 + self.match(TParser.T__17) + self.state = 148 + self.match(TParser.T__18) + self.state = 149 + localctx.valueType = self.typeSymbol() + self.state = 150 + self.match(TParser.T__19) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ModelTypeSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.valueType = None # TypeSymbolContext + + def typeSymbol(self): + return self.getTypedRuleContext(TParser.TypeSymbolContext,0) + + + def getRuleIndex(self): + return TParser.RULE_modelTypeSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModelTypeSymbol" ): + listener.enterModelTypeSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModelTypeSymbol" ): + listener.exitModelTypeSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModelTypeSymbol" ): + return visitor.visitModelTypeSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def modelTypeSymbol(self): + + localctx = TParser.ModelTypeSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_modelTypeSymbol) + try: + self.enterOuterAlt(localctx, 1) + self.state = 152 + self.match(TParser.T__20) + self.state = 153 + self.match(TParser.T__18) + self.state = 154 + localctx.valueType = self.typeSymbol() + self.state = 155 + self.match(TParser.T__19) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StructSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.name = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def structFieldSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.StructFieldSymbolContext) + else: + return self.getTypedRuleContext(TParser.StructFieldSymbolContext,i) + + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_structSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStructSymbol" ): + listener.enterStructSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStructSymbol" ): + listener.exitStructSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStructSymbol" ): + return visitor.visitStructSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def structSymbol(self): + + localctx = TParser.StructSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_structSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 158 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 157 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 160 + self.match(TParser.T__21) + self.state = 161 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 162 + self.match(TParser.T__4) + self.state = 166 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__12) | (1 << TParser.T__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__20) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): + self.state = 163 + self.structFieldSymbol() + self.state = 168 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 169 + self.match(TParser.T__5) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StructFieldSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.name = None # Token + + def typeSymbol(self): + return self.getTypedRuleContext(TParser.TypeSymbolContext,0) + + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_structFieldSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStructFieldSymbol" ): + listener.enterStructFieldSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStructFieldSymbol" ): + listener.exitStructFieldSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStructFieldSymbol" ): + return visitor.visitStructFieldSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def structFieldSymbol(self): + + localctx = TParser.StructFieldSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_structFieldSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 172 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 171 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 174 + self.typeSymbol() + self.state = 175 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 177 + _la = self._input.LA(1) + if _la==TParser.T__1: + self.state = 176 + self.match(TParser.T__1) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.name = None # Token + + def enumTypeSymbol(self): + return self.getTypedRuleContext(TParser.EnumTypeSymbolContext,0) + + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def enumMemberSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.EnumMemberSymbolContext) + else: + return self.getTypedRuleContext(TParser.EnumMemberSymbolContext,i) + + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_enumSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumSymbol" ): + listener.enterEnumSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumSymbol" ): + listener.exitEnumSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumSymbol" ): + return visitor.visitEnumSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def enumSymbol(self): + + localctx = TParser.EnumSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_enumSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 180 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 179 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 182 + self.enumTypeSymbol() + self.state = 183 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 184 + self.match(TParser.T__4) + self.state = 188 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==TParser.IDENTIFIER or _la==TParser.DOCCOMMENT: + self.state = 185 + self.enumMemberSymbol() + self.state = 190 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 191 + self.match(TParser.T__5) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumTypeSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.isEnum = None # Token + self.isFlag = None # Token + + + def getRuleIndex(self): + return TParser.RULE_enumTypeSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumTypeSymbol" ): + listener.enterEnumTypeSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumTypeSymbol" ): + listener.exitEnumTypeSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumTypeSymbol" ): + return visitor.visitEnumTypeSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def enumTypeSymbol(self): + + localctx = TParser.EnumTypeSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_enumTypeSymbol) + try: + self.state = 195 + token = self._input.LA(1) + if token in [TParser.T__22]: + self.enterOuterAlt(localctx, 1) + self.state = 193 + localctx.isEnum = self.match(TParser.T__22) + + elif token in [TParser.T__23]: + self.enterOuterAlt(localctx, 2) + self.state = 194 + localctx.isFlag = self.match(TParser.T__23) + + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumMemberSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.comment = None # Token + self.name = None # Token + + def IDENTIFIER(self): + return self.getToken(TParser.IDENTIFIER, 0) + + def intSymbol(self): + return self.getTypedRuleContext(TParser.IntSymbolContext,0) + + + def DOCCOMMENT(self): + return self.getToken(TParser.DOCCOMMENT, 0) + + def getRuleIndex(self): + return TParser.RULE_enumMemberSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumMemberSymbol" ): + listener.enterEnumMemberSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumMemberSymbol" ): + listener.exitEnumMemberSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumMemberSymbol" ): + return visitor.visitEnumMemberSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def enumMemberSymbol(self): + + localctx = TParser.EnumMemberSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_enumMemberSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 198 + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 197 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 200 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 203 + _la = self._input.LA(1) + if _la==TParser.T__24: + self.state = 201 + self.match(TParser.T__24) + self.state = 202 + self.intSymbol() + + + self.state = 206 + _la = self._input.LA(1) + if _la==TParser.T__11: + self.state = 205 + self.match(TParser.T__11) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IntSymbolContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value = None # Token + + def INTCONSTANT(self): + return self.getToken(TParser.INTCONSTANT, 0) + + def HEXCONSTANT(self): + return self.getToken(TParser.HEXCONSTANT, 0) + + def getRuleIndex(self): + return TParser.RULE_intSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIntSymbol" ): + listener.enterIntSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIntSymbol" ): + listener.exitIntSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIntSymbol" ): + return visitor.visitIntSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def intSymbol(self): + + localctx = TParser.IntSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_intSymbol) + try: + self.state = 210 + token = self._input.LA(1) + if token in [TParser.INTCONSTANT]: + self.enterOuterAlt(localctx, 1) + self.state = 208 + localctx.value = self.match(TParser.INTCONSTANT) + + elif token in [TParser.HEXCONSTANT]: + self.enterOuterAlt(localctx, 2) + self.state = 209 + localctx.value = self.match(TParser.HEXCONSTANT) + + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + + diff --git a/qface/idl/parser/TVisitor.py b/qface/idl/parser/TVisitor.py new file mode 100644 index 0000000..dee7f69 --- /dev/null +++ b/qface/idl/parser/TVisitor.py @@ -0,0 +1,118 @@ +# Generated from T.g4 by ANTLR 4.5.3 +from antlr4 import * +if __name__ is not None and "." in __name__: + from .TParser import TParser +else: + from TParser import TParser + +# This class defines a complete generic visitor for a parse tree produced by TParser. + +class TVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by TParser#documentSymbol. + def visitDocumentSymbol(self, ctx:TParser.DocumentSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#headerSymbol. + def visitHeaderSymbol(self, ctx:TParser.HeaderSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#importSymbol. + def visitImportSymbol(self, ctx:TParser.ImportSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#moduleSymbol. + def visitModuleSymbol(self, ctx:TParser.ModuleSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#definitionSymbol. + def visitDefinitionSymbol(self, ctx:TParser.DefinitionSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#interfaceSymbol. + def visitInterfaceSymbol(self, ctx:TParser.InterfaceSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#interfaceMemberSymbol. + def visitInterfaceMemberSymbol(self, ctx:TParser.InterfaceMemberSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#operationSymbol. + def visitOperationSymbol(self, ctx:TParser.OperationSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#propertySymbol. + def visitPropertySymbol(self, ctx:TParser.PropertySymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#operationParameterSymbol. + def visitOperationParameterSymbol(self, ctx:TParser.OperationParameterSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#typeSymbol. + def visitTypeSymbol(self, ctx:TParser.TypeSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#complexTypeSymbol. + def visitComplexTypeSymbol(self, ctx:TParser.ComplexTypeSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#primitiveTypeSymbol. + def visitPrimitiveTypeSymbol(self, ctx:TParser.PrimitiveTypeSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#listTypeSymbol. + def visitListTypeSymbol(self, ctx:TParser.ListTypeSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#modelTypeSymbol. + def visitModelTypeSymbol(self, ctx:TParser.ModelTypeSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#structSymbol. + def visitStructSymbol(self, ctx:TParser.StructSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#structFieldSymbol. + def visitStructFieldSymbol(self, ctx:TParser.StructFieldSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#enumSymbol. + def visitEnumSymbol(self, ctx:TParser.EnumSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#enumTypeSymbol. + def visitEnumTypeSymbol(self, ctx:TParser.EnumTypeSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#enumMemberSymbol. + def visitEnumMemberSymbol(self, ctx:TParser.EnumMemberSymbolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by TParser#intSymbol. + def visitIntSymbol(self, ctx:TParser.IntSymbolContext): + return self.visitChildren(ctx) + + + +del TParser
\ No newline at end of file diff --git a/qface/idl/parser/__init__.py b/qface/idl/parser/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/qface/idl/parser/__init__.py |