diff options
author | Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2017-02-03 10:03:06 +0100 |
---|---|---|
committer | Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2017-02-03 10:03:06 +0100 |
commit | fccdb3979739a310a30ab087be83641df8ed311f (patch) | |
tree | e0d98a3776f75f0d0c8a3793970c17fe67e4b499 | |
parent | c969f932fa45c0d193b9254c001145165639961c (diff) | |
download | qtivi-qface-fccdb3979739a310a30ab087be83641df8ed311f.tar.gz |
Added parser support for signals. Signals are now an own domain objects and not anymore operations with a special flag. This should make code generation easier but initially will break the generation until the templates are fixed to support signals.
-rw-r--r-- | qface/idl/domain.py | 35 | ||||
-rw-r--r-- | qface/idl/listener.py | 17 | ||||
-rw-r--r-- | qface/idl/parser/T.g4 | 8 | ||||
-rw-r--r-- | qface/idl/parser/T.tokens | 8 | ||||
-rw-r--r-- | qface/idl/parser/TLexer.py | 205 | ||||
-rw-r--r-- | qface/idl/parser/TLexer.tokens | 8 | ||||
-rw-r--r-- | qface/idl/parser/TListener.py | 9 | ||||
-rw-r--r-- | qface/idl/parser/TParser.py | 769 | ||||
-rw-r--r-- | qface/idl/parser/TVisitor.py | 5 | ||||
-rw-r--r-- | tests/in/com.pelagicore.ivi.tuner.qface | 3 | ||||
-rw-r--r-- | tests/in/com.pelagicore.one.qface | 2 | ||||
-rw-r--r-- | tests/test_parser.py | 16 |
12 files changed, 635 insertions, 450 deletions
diff --git a/qface/idl/domain.py b/qface/idl/domain.py index 3d08e19..1a8ca98 100644 --- a/qface/idl/domain.py +++ b/qface/idl/domain.py @@ -277,15 +277,15 @@ class Module(Symbol): class Interface(Symbol): - """A interface is an object with operations, properties and events""" + """A interface is an object with operations, properties and signals""" 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] - self._definitionMap = ChainMap(self._propertyMap, self._operationMap, self._eventMap) + self._signalMap = OrderedDict() # type: dict[str, Signal] + self._definitionMap = ChainMap(self._propertyMap, self._operationMap, self._signalMap) @property def properties(self): @@ -298,22 +298,33 @@ class Interface(Symbol): return self._operationMap.values() @property - def events(self): - '''returns ordered list of events''' - return self._eventMap.values() + def signals(self): + '''returns ordered list of signals''' + return self._signalMap.values() class Operation(TypedSymbol): """An operation inside a interface""" - def __init__(self, name: str, interface: Interface, is_event=False): + def __init__(self, name: str, interface: Interface): 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.interface._operationMap[name] = self + self._parameterMap = OrderedDict() # type: dict[Parameter] + + @property + def parameters(self): + '''returns ordered list of parameters''' + return self._parameterMap.values() + + +class Signal(Symbol): + """A signal inside an interface""" + def __init__(self, name: str, interface: Interface): + super().__init__(name, interface.module) + log.debug('Signal()') + self.interface = interface + self.interface._signalMap[name] = self self._parameterMap = OrderedDict() # type: dict[Parameter] @property diff --git a/qface/idl/listener.py b/qface/idl/listener.py index 81df9b8..925e908 100644 --- a/qface/idl/listener.py +++ b/qface/idl/listener.py @@ -28,6 +28,7 @@ class DomainListener(TListener): self.enum = None # type:Enum self.enumCounter = 0 # int self.operation = None # type:Operation + self.signal = None # type:Signal self.parameter = None # type:Parameter self.property = None # type:Property self.field = None # type:Field @@ -139,8 +140,7 @@ class DomainListener(TListener): 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.operation = Operation(name, self.interface) self.parse_annotations(ctx, self.operation) self.parse_type(ctx, self.operation.type) contextMap[ctx] = self.operation @@ -148,9 +148,20 @@ class DomainListener(TListener): def exitOperationSymbol(self, ctx: TParser.OperationSymbolContext): self.operation = None + def enterSignalSymbol(self, ctx: TParser.SignalSymbolContext): + assert self.interface + name = ctx.name.text + self.signal = Signal(name, self.interface) + self.parse_annotations(ctx, self.operation) + contextMap[ctx] = self.signal + + def exitSignalSymbol(self, ctx: TParser.SignalSymbolContext): + self.signal = None + def enterOperationParameterSymbol(self, ctx: TParser.OperationParameterSymbolContext): name = ctx.name.text - self.parameter = Parameter(name, self.operation) + symbol = self.operation if self.operation else self.signal + self.parameter = Parameter(name, symbol) contextMap[ctx] = self.parameter def exitOperationParameterSymbol(self, ctx: TParser.OperationParameterSymbolContext): diff --git a/qface/idl/parser/T.g4 b/qface/idl/parser/T.g4 index 1dd2e7e..3782c91 100644 --- a/qface/idl/parser/T.g4 +++ b/qface/idl/parser/T.g4 @@ -35,12 +35,18 @@ interfaceSymbol interfaceMemberSymbol : operationSymbol | propertySymbol + | signalSymbol ; operationSymbol - : comment=DOCCOMMENT? tagSymbol* isEvent='event'? (typeSymbol | 'void') name=IDENTIFIER '(' operationParameterSymbol* ')' ';'? + : comment=DOCCOMMENT? tagSymbol* (typeSymbol | 'void') name=IDENTIFIER '(' operationParameterSymbol* ')' ';'? ; +signalSymbol + : comment=DOCCOMMENT? tagSymbol* 'signal' name=IDENTIFIER '(' operationParameterSymbol* ')' ';'? + ; + + propertySymbol : comment=DOCCOMMENT? tagSymbol* isReadOnly='readonly'? typeSymbol name=IDENTIFIER ';'? ; diff --git a/qface/idl/parser/T.tokens b/qface/idl/parser/T.tokens index 4241ad3..25c2f2f 100644 --- a/qface/idl/parser/T.tokens +++ b/qface/idl/parser/T.tokens @@ -38,10 +38,10 @@ MULTICOMM=34 'interface'=4 '{'=5 '}'=6 -'event'=7 -'void'=8 -'('=9 -')'=10 +'void'=7 +'('=8 +')'=9 +'signal'=10 'readonly'=11 ','=12 '='=13 diff --git a/qface/idl/parser/TLexer.py b/qface/idl/parser/TLexer.py index fe3cf8f..167f9ef 100644 --- a/qface/idl/parser/TLexer.py +++ b/qface/idl/parser/TLexer.py @@ -6,7 +6,7 @@ from io import StringIO def serializedATN(): with StringIO() as buf: buf.write("\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2$") - buf.write("\u010a\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("\u010b\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") @@ -14,106 +14,107 @@ def serializedATN(): buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\3\2\3\2\3\2") buf.write("\3\2\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\7\3\7") - buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3") - buf.write("\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3") - buf.write("\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20") - buf.write("\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25") - buf.write("\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32") - buf.write("\3\32\3\32\3\32\3\32\3\33\5\33\u00bc\n\33\3\33\6\33\u00bf") - buf.write("\n\33\r\33\16\33\u00c0\3\34\3\34\3\34\3\34\6\34\u00c7") - buf.write("\n\34\r\34\16\34\u00c8\3\35\3\35\3\35\7\35\u00ce\n\35") - buf.write("\f\35\16\35\u00d1\13\35\3\36\3\36\7\36\u00d5\n\36\f\36") - buf.write("\16\36\u00d8\13\36\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 ") - buf.write("\7 \u00e3\n \f \16 \u00e6\13 \3 \3 \3 \3!\6!\u00ec\n!") - buf.write("\r!\16!\u00ed\3!\3!\3\"\3\"\3\"\3\"\7\"\u00f6\n\"\f\"") - buf.write("\16\"\u00f9\13\"\3\"\3\"\3#\3#\3#\3#\7#\u0101\n#\f#\16") - buf.write("#\u0104\13#\3#\3#\3#\3#\3#\4\u00e4\u0102\2$\3\3\5\4\7") - buf.write("\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17") - buf.write("\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63") - buf.write("\33\65\34\67\359\36;\37= ?!A\"C#E$\3\2\t\4\2--//\5\2\62") - buf.write(";CHch\5\2C\\aac|\7\2\60\60\62;C\\aac|\3\2\62;\5\2\13\f") - buf.write("\17\17\"\"\4\2\f\f\17\17\u0112\2\3\3\2\2\2\2\5\3\2\2\2") - buf.write("\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17") - buf.write("\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3") - buf.write("\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2") - buf.write("\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3") - buf.write("\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2") - buf.write("\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3") - buf.write("\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E") - buf.write("\3\2\2\2\3G\3\2\2\2\5N\3\2\2\2\7P\3\2\2\2\tW\3\2\2\2\13") - buf.write("a\3\2\2\2\rc\3\2\2\2\17e\3\2\2\2\21k\3\2\2\2\23p\3\2\2") - buf.write("\2\25r\3\2\2\2\27t\3\2\2\2\31}\3\2\2\2\33\177\3\2\2\2") - buf.write("\35\u0081\3\2\2\2\37\u0086\3\2\2\2!\u008a\3\2\2\2#\u008f") - buf.write("\3\2\2\2%\u0096\3\2\2\2\'\u009a\3\2\2\2)\u009f\3\2\2\2") - buf.write("+\u00a1\3\2\2\2-\u00a3\3\2\2\2/\u00a9\3\2\2\2\61\u00b0") - buf.write("\3\2\2\2\63\u00b5\3\2\2\2\65\u00bb\3\2\2\2\67\u00c2\3") - buf.write("\2\2\29\u00ca\3\2\2\2;\u00d2\3\2\2\2=\u00d9\3\2\2\2?\u00dd") - buf.write("\3\2\2\2A\u00eb\3\2\2\2C\u00f1\3\2\2\2E\u00fc\3\2\2\2") - buf.write("GH\7k\2\2HI\7o\2\2IJ\7r\2\2JK\7q\2\2KL\7t\2\2LM\7v\2\2") - buf.write("M\4\3\2\2\2NO\7=\2\2O\6\3\2\2\2PQ\7o\2\2QR\7q\2\2RS\7") - buf.write("f\2\2ST\7w\2\2TU\7n\2\2UV\7g\2\2V\b\3\2\2\2WX\7k\2\2X") - buf.write("Y\7p\2\2YZ\7v\2\2Z[\7g\2\2[\\\7t\2\2\\]\7h\2\2]^\7c\2") - buf.write("\2^_\7e\2\2_`\7g\2\2`\n\3\2\2\2ab\7}\2\2b\f\3\2\2\2cd") - buf.write("\7\177\2\2d\16\3\2\2\2ef\7g\2\2fg\7x\2\2gh\7g\2\2hi\7") - buf.write("p\2\2ij\7v\2\2j\20\3\2\2\2kl\7x\2\2lm\7q\2\2mn\7k\2\2") - buf.write("no\7f\2\2o\22\3\2\2\2pq\7*\2\2q\24\3\2\2\2rs\7+\2\2s\26") - buf.write("\3\2\2\2tu\7t\2\2uv\7g\2\2vw\7c\2\2wx\7f\2\2xy\7q\2\2") - buf.write("yz\7p\2\2z{\7n\2\2{|\7{\2\2|\30\3\2\2\2}~\7.\2\2~\32\3") - buf.write("\2\2\2\177\u0080\7?\2\2\u0080\34\3\2\2\2\u0081\u0082\7") - buf.write("d\2\2\u0082\u0083\7q\2\2\u0083\u0084\7q\2\2\u0084\u0085") - buf.write("\7n\2\2\u0085\36\3\2\2\2\u0086\u0087\7k\2\2\u0087\u0088") - buf.write("\7p\2\2\u0088\u0089\7v\2\2\u0089 \3\2\2\2\u008a\u008b") - buf.write("\7t\2\2\u008b\u008c\7g\2\2\u008c\u008d\7c\2\2\u008d\u008e") - buf.write("\7n\2\2\u008e\"\3\2\2\2\u008f\u0090\7u\2\2\u0090\u0091") - buf.write("\7v\2\2\u0091\u0092\7t\2\2\u0092\u0093\7k\2\2\u0093\u0094") - buf.write("\7p\2\2\u0094\u0095\7i\2\2\u0095$\3\2\2\2\u0096\u0097") - buf.write("\7x\2\2\u0097\u0098\7c\2\2\u0098\u0099\7t\2\2\u0099&\3") - buf.write("\2\2\2\u009a\u009b\7n\2\2\u009b\u009c\7k\2\2\u009c\u009d") - buf.write("\7u\2\2\u009d\u009e\7v\2\2\u009e(\3\2\2\2\u009f\u00a0") - buf.write("\7>\2\2\u00a0*\3\2\2\2\u00a1\u00a2\7@\2\2\u00a2,\3\2\2") - buf.write("\2\u00a3\u00a4\7o\2\2\u00a4\u00a5\7q\2\2\u00a5\u00a6\7") - buf.write("f\2\2\u00a6\u00a7\7g\2\2\u00a7\u00a8\7n\2\2\u00a8.\3\2") - buf.write("\2\2\u00a9\u00aa\7u\2\2\u00aa\u00ab\7v\2\2\u00ab\u00ac") - buf.write("\7t\2\2\u00ac\u00ad\7w\2\2\u00ad\u00ae\7e\2\2\u00ae\u00af") - buf.write("\7v\2\2\u00af\60\3\2\2\2\u00b0\u00b1\7g\2\2\u00b1\u00b2") - buf.write("\7p\2\2\u00b2\u00b3\7w\2\2\u00b3\u00b4\7o\2\2\u00b4\62") - buf.write("\3\2\2\2\u00b5\u00b6\7h\2\2\u00b6\u00b7\7n\2\2\u00b7\u00b8") - buf.write("\7c\2\2\u00b8\u00b9\7i\2\2\u00b9\64\3\2\2\2\u00ba\u00bc") - buf.write("\t\2\2\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3\2\2\2\u00bc") - buf.write("\u00be\3\2\2\2\u00bd\u00bf\4\62;\2\u00be\u00bd\3\2\2\2") - buf.write("\u00bf\u00c0\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3") - buf.write("\2\2\2\u00c1\66\3\2\2\2\u00c2\u00c3\7\62\2\2\u00c3\u00c4") - buf.write("\7z\2\2\u00c4\u00c6\3\2\2\2\u00c5\u00c7\t\3\2\2\u00c6") - buf.write("\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c6\3\2\2\2") - buf.write("\u00c8\u00c9\3\2\2\2\u00c98\3\2\2\2\u00ca\u00cb\7B\2\2") - buf.write("\u00cb\u00cf\t\4\2\2\u00cc\u00ce\t\5\2\2\u00cd\u00cc\3") - buf.write("\2\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00cd\3\2\2\2\u00cf\u00d0") - buf.write("\3\2\2\2\u00d0:\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d2\u00d6") - buf.write("\t\4\2\2\u00d3\u00d5\t\5\2\2\u00d4\u00d3\3\2\2\2\u00d5") - buf.write("\u00d8\3\2\2\2\u00d6\u00d4\3\2\2\2\u00d6\u00d7\3\2\2\2") - buf.write("\u00d7<\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d9\u00da\t\6\2") - buf.write("\2\u00da\u00db\7\60\2\2\u00db\u00dc\t\6\2\2\u00dc>\3\2") - buf.write("\2\2\u00dd\u00de\7\61\2\2\u00de\u00df\7,\2\2\u00df\u00e0") - buf.write("\7,\2\2\u00e0\u00e4\3\2\2\2\u00e1\u00e3\13\2\2\2\u00e2") - buf.write("\u00e1\3\2\2\2\u00e3\u00e6\3\2\2\2\u00e4\u00e5\3\2\2\2") - buf.write("\u00e4\u00e2\3\2\2\2\u00e5\u00e7\3\2\2\2\u00e6\u00e4\3") - buf.write("\2\2\2\u00e7\u00e8\7,\2\2\u00e8\u00e9\7\61\2\2\u00e9@") - buf.write("\3\2\2\2\u00ea\u00ec\t\7\2\2\u00eb\u00ea\3\2\2\2\u00ec") - buf.write("\u00ed\3\2\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2") - buf.write("\u00ee\u00ef\3\2\2\2\u00ef\u00f0\b!\2\2\u00f0B\3\2\2\2") - buf.write("\u00f1\u00f2\7\61\2\2\u00f2\u00f3\7\61\2\2\u00f3\u00f7") - buf.write("\3\2\2\2\u00f4\u00f6\n\b\2\2\u00f5\u00f4\3\2\2\2\u00f6") - buf.write("\u00f9\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f8\3\2\2\2") - buf.write("\u00f8\u00fa\3\2\2\2\u00f9\u00f7\3\2\2\2\u00fa\u00fb\b") - buf.write("\"\2\2\u00fbD\3\2\2\2\u00fc\u00fd\7\61\2\2\u00fd\u00fe") - buf.write("\7,\2\2\u00fe\u0102\3\2\2\2\u00ff\u0101\13\2\2\2\u0100") - buf.write("\u00ff\3\2\2\2\u0101\u0104\3\2\2\2\u0102\u0103\3\2\2\2") - buf.write("\u0102\u0100\3\2\2\2\u0103\u0105\3\2\2\2\u0104\u0102\3") - buf.write("\2\2\2\u0105\u0106\7,\2\2\u0106\u0107\7\61\2\2\u0107\u0108") - buf.write("\3\2\2\2\u0108\u0109\b#\2\2\u0109F\3\2\2\2\f\2\u00bb\u00c0") - buf.write("\u00c8\u00cf\u00d6\u00e4\u00ed\u00f7\u0102\3\b\2\2") + buf.write("\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f") + buf.write("\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20") + buf.write("\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22") + buf.write("\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24") + buf.write("\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27") + buf.write("\3\30\3\30\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\32\3\32\3\32\3\33\5\33\u00bd\n\33\3") + buf.write("\33\6\33\u00c0\n\33\r\33\16\33\u00c1\3\34\3\34\3\34\3") + buf.write("\34\6\34\u00c8\n\34\r\34\16\34\u00c9\3\35\3\35\3\35\7") + buf.write("\35\u00cf\n\35\f\35\16\35\u00d2\13\35\3\36\3\36\7\36\u00d6") + buf.write("\n\36\f\36\16\36\u00d9\13\36\3\37\3\37\3\37\3\37\3 \3") + buf.write(" \3 \3 \3 \7 \u00e4\n \f \16 \u00e7\13 \3 \3 \3 \3!\6") + buf.write("!\u00ed\n!\r!\16!\u00ee\3!\3!\3\"\3\"\3\"\3\"\7\"\u00f7") + buf.write("\n\"\f\"\16\"\u00fa\13\"\3\"\3\"\3#\3#\3#\3#\7#\u0102") + buf.write("\n#\f#\16#\u0105\13#\3#\3#\3#\3#\3#\4\u00e5\u0103\2$\3") + buf.write("\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") + buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") + buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$\3\2\t\4\2--/") + buf.write("/\5\2\62;CHch\5\2C\\aac|\7\2\60\60\62;C\\aac|\3\2\62;") + buf.write("\5\2\13\f\17\17\"\"\4\2\f\f\17\17\u0113\2\3\3\2\2\2\2") + buf.write("\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3") + buf.write("\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2") + buf.write("\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2") + buf.write("\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3") + buf.write("\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61") + buf.write("\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2") + buf.write("\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3") + buf.write("\2\2\2\2E\3\2\2\2\3G\3\2\2\2\5N\3\2\2\2\7P\3\2\2\2\tW") + buf.write("\3\2\2\2\13a\3\2\2\2\rc\3\2\2\2\17e\3\2\2\2\21j\3\2\2") + buf.write("\2\23l\3\2\2\2\25n\3\2\2\2\27u\3\2\2\2\31~\3\2\2\2\33") + buf.write("\u0080\3\2\2\2\35\u0082\3\2\2\2\37\u0087\3\2\2\2!\u008b") + buf.write("\3\2\2\2#\u0090\3\2\2\2%\u0097\3\2\2\2\'\u009b\3\2\2\2") + buf.write(")\u00a0\3\2\2\2+\u00a2\3\2\2\2-\u00a4\3\2\2\2/\u00aa\3") + buf.write("\2\2\2\61\u00b1\3\2\2\2\63\u00b6\3\2\2\2\65\u00bc\3\2") + buf.write("\2\2\67\u00c3\3\2\2\29\u00cb\3\2\2\2;\u00d3\3\2\2\2=\u00da") + buf.write("\3\2\2\2?\u00de\3\2\2\2A\u00ec\3\2\2\2C\u00f2\3\2\2\2") + buf.write("E\u00fd\3\2\2\2GH\7k\2\2HI\7o\2\2IJ\7r\2\2JK\7q\2\2KL") + buf.write("\7t\2\2LM\7v\2\2M\4\3\2\2\2NO\7=\2\2O\6\3\2\2\2PQ\7o\2") + buf.write("\2QR\7q\2\2RS\7f\2\2ST\7w\2\2TU\7n\2\2UV\7g\2\2V\b\3\2") + buf.write("\2\2WX\7k\2\2XY\7p\2\2YZ\7v\2\2Z[\7g\2\2[\\\7t\2\2\\]") + buf.write("\7h\2\2]^\7c\2\2^_\7e\2\2_`\7g\2\2`\n\3\2\2\2ab\7}\2\2") + buf.write("b\f\3\2\2\2cd\7\177\2\2d\16\3\2\2\2ef\7x\2\2fg\7q\2\2") + buf.write("gh\7k\2\2hi\7f\2\2i\20\3\2\2\2jk\7*\2\2k\22\3\2\2\2lm") + buf.write("\7+\2\2m\24\3\2\2\2no\7u\2\2op\7k\2\2pq\7i\2\2qr\7p\2") + buf.write("\2rs\7c\2\2st\7n\2\2t\26\3\2\2\2uv\7t\2\2vw\7g\2\2wx\7") + buf.write("c\2\2xy\7f\2\2yz\7q\2\2z{\7p\2\2{|\7n\2\2|}\7{\2\2}\30") + buf.write("\3\2\2\2~\177\7.\2\2\177\32\3\2\2\2\u0080\u0081\7?\2\2") + buf.write("\u0081\34\3\2\2\2\u0082\u0083\7d\2\2\u0083\u0084\7q\2") + buf.write("\2\u0084\u0085\7q\2\2\u0085\u0086\7n\2\2\u0086\36\3\2") + buf.write("\2\2\u0087\u0088\7k\2\2\u0088\u0089\7p\2\2\u0089\u008a") + buf.write("\7v\2\2\u008a \3\2\2\2\u008b\u008c\7t\2\2\u008c\u008d") + buf.write("\7g\2\2\u008d\u008e\7c\2\2\u008e\u008f\7n\2\2\u008f\"") + buf.write("\3\2\2\2\u0090\u0091\7u\2\2\u0091\u0092\7v\2\2\u0092\u0093") + buf.write("\7t\2\2\u0093\u0094\7k\2\2\u0094\u0095\7p\2\2\u0095\u0096") + buf.write("\7i\2\2\u0096$\3\2\2\2\u0097\u0098\7x\2\2\u0098\u0099") + buf.write("\7c\2\2\u0099\u009a\7t\2\2\u009a&\3\2\2\2\u009b\u009c") + buf.write("\7n\2\2\u009c\u009d\7k\2\2\u009d\u009e\7u\2\2\u009e\u009f") + buf.write("\7v\2\2\u009f(\3\2\2\2\u00a0\u00a1\7>\2\2\u00a1*\3\2\2") + buf.write("\2\u00a2\u00a3\7@\2\2\u00a3,\3\2\2\2\u00a4\u00a5\7o\2") + buf.write("\2\u00a5\u00a6\7q\2\2\u00a6\u00a7\7f\2\2\u00a7\u00a8\7") + buf.write("g\2\2\u00a8\u00a9\7n\2\2\u00a9.\3\2\2\2\u00aa\u00ab\7") + buf.write("u\2\2\u00ab\u00ac\7v\2\2\u00ac\u00ad\7t\2\2\u00ad\u00ae") + buf.write("\7w\2\2\u00ae\u00af\7e\2\2\u00af\u00b0\7v\2\2\u00b0\60") + buf.write("\3\2\2\2\u00b1\u00b2\7g\2\2\u00b2\u00b3\7p\2\2\u00b3\u00b4") + buf.write("\7w\2\2\u00b4\u00b5\7o\2\2\u00b5\62\3\2\2\2\u00b6\u00b7") + buf.write("\7h\2\2\u00b7\u00b8\7n\2\2\u00b8\u00b9\7c\2\2\u00b9\u00ba") + buf.write("\7i\2\2\u00ba\64\3\2\2\2\u00bb\u00bd\t\2\2\2\u00bc\u00bb") + buf.write("\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00bf\3\2\2\2\u00be") + buf.write("\u00c0\4\62;\2\u00bf\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2") + buf.write("\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\66\3\2") + buf.write("\2\2\u00c3\u00c4\7\62\2\2\u00c4\u00c5\7z\2\2\u00c5\u00c7") + buf.write("\3\2\2\2\u00c6\u00c8\t\3\2\2\u00c7\u00c6\3\2\2\2\u00c8") + buf.write("\u00c9\3\2\2\2\u00c9\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2") + buf.write("\u00ca8\3\2\2\2\u00cb\u00cc\7B\2\2\u00cc\u00d0\t\4\2\2") + buf.write("\u00cd\u00cf\t\5\2\2\u00ce\u00cd\3\2\2\2\u00cf\u00d2\3") + buf.write("\2\2\2\u00d0\u00ce\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1:") + buf.write("\3\2\2\2\u00d2\u00d0\3\2\2\2\u00d3\u00d7\t\4\2\2\u00d4") + buf.write("\u00d6\t\5\2\2\u00d5\u00d4\3\2\2\2\u00d6\u00d9\3\2\2\2") + buf.write("\u00d7\u00d5\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8<\3\2\2") + buf.write("\2\u00d9\u00d7\3\2\2\2\u00da\u00db\t\6\2\2\u00db\u00dc") + buf.write("\7\60\2\2\u00dc\u00dd\t\6\2\2\u00dd>\3\2\2\2\u00de\u00df") + buf.write("\7\61\2\2\u00df\u00e0\7,\2\2\u00e0\u00e1\7,\2\2\u00e1") + buf.write("\u00e5\3\2\2\2\u00e2\u00e4\13\2\2\2\u00e3\u00e2\3\2\2") + buf.write("\2\u00e4\u00e7\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e5\u00e3") + buf.write("\3\2\2\2\u00e6\u00e8\3\2\2\2\u00e7\u00e5\3\2\2\2\u00e8") + buf.write("\u00e9\7,\2\2\u00e9\u00ea\7\61\2\2\u00ea@\3\2\2\2\u00eb") + buf.write("\u00ed\t\7\2\2\u00ec\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2") + buf.write("\u00ee\u00ec\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\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\61\2\2\u00f4\u00f8\3\2\2\2\u00f5") + buf.write("\u00f7\n\b\2\2\u00f6\u00f5\3\2\2\2\u00f7\u00fa\3\2\2\2") + buf.write("\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fb\3") + buf.write("\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fc\b\"\2\2\u00fcD") + buf.write("\3\2\2\2\u00fd\u00fe\7\61\2\2\u00fe\u00ff\7,\2\2\u00ff") + buf.write("\u0103\3\2\2\2\u0100\u0102\13\2\2\2\u0101\u0100\3\2\2") + buf.write("\2\u0102\u0105\3\2\2\2\u0103\u0104\3\2\2\2\u0103\u0101") + buf.write("\3\2\2\2\u0104\u0106\3\2\2\2\u0105\u0103\3\2\2\2\u0106") + buf.write("\u0107\7,\2\2\u0107\u0108\7\61\2\2\u0108\u0109\3\2\2\2") + buf.write("\u0109\u010a\b#\2\2\u010aF\3\2\2\2\f\2\u00bc\u00c1\u00c9") + buf.write("\u00d0\u00d7\u00e5\u00ee\u00f8\u0103\3\b\2\2") return buf.getvalue() @@ -163,7 +164,7 @@ class TLexer(Lexer): literalNames = [ "<INVALID>", "'import'", "';'", "'module'", "'interface'", "'{'", "'}'", - "'event'", "'void'", "'('", "')'", "'readonly'", "','", "'='", + "'void'", "'('", "')'", "'signal'", "'readonly'", "','", "'='", "'bool'", "'int'", "'real'", "'string'", "'var'", "'list'", "'<'", "'>'", "'model'", "'struct'", "'enum'", "'flag'" ] diff --git a/qface/idl/parser/TLexer.tokens b/qface/idl/parser/TLexer.tokens index 4241ad3..25c2f2f 100644 --- a/qface/idl/parser/TLexer.tokens +++ b/qface/idl/parser/TLexer.tokens @@ -38,10 +38,10 @@ MULTICOMM=34 'interface'=4 '{'=5 '}'=6 -'event'=7 -'void'=8 -'('=9 -')'=10 +'void'=7 +'('=8 +')'=9 +'signal'=10 'readonly'=11 ','=12 '='=13 diff --git a/qface/idl/parser/TListener.py b/qface/idl/parser/TListener.py index b1f0969..07d41ad 100644 --- a/qface/idl/parser/TListener.py +++ b/qface/idl/parser/TListener.py @@ -80,6 +80,15 @@ class TListener(ParseTreeListener): pass + # Enter a parse tree produced by TParser#signalSymbol. + def enterSignalSymbol(self, ctx:TParser.SignalSymbolContext): + pass + + # Exit a parse tree produced by TParser#signalSymbol. + def exitSignalSymbol(self, ctx:TParser.SignalSymbolContext): + pass + + # Enter a parse tree produced by TParser#propertySymbol. def enterPropertySymbol(self, ctx:TParser.PropertySymbolContext): pass diff --git a/qface/idl/parser/TParser.py b/qface/idl/parser/TParser.py index 081f381..d43a416 100644 --- a/qface/idl/parser/TParser.py +++ b/qface/idl/parser/TParser.py @@ -6,136 +6,149 @@ from io import StringIO def serializedATN(): with StringIO() as buf: buf.write("\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3$") - buf.write("\u0120\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("\u0136\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\4\27\t\27\4\30\t\30\3\2") - buf.write("\3\2\7\2\63\n\2\f\2\16\2\66\13\2\3\3\3\3\7\3:\n\3\f\3") - buf.write("\16\3=\13\3\3\4\3\4\3\4\3\4\5\4C\n\4\3\5\5\5F\n\5\3\5") - buf.write("\7\5I\n\5\f\5\16\5L\13\5\3\5\3\5\3\5\3\5\5\5R\n\5\3\6") - buf.write("\3\6\3\6\5\6W\n\6\3\7\5\7Z\n\7\3\7\7\7]\n\7\f\7\16\7`") - buf.write("\13\7\3\7\3\7\3\7\3\7\7\7f\n\7\f\7\16\7i\13\7\3\7\3\7") - buf.write("\5\7m\n\7\3\b\3\b\5\bq\n\b\3\t\5\tt\n\t\3\t\7\tw\n\t\f") - buf.write("\t\16\tz\13\t\3\t\5\t}\n\t\3\t\3\t\5\t\u0081\n\t\3\t\3") - buf.write("\t\3\t\7\t\u0086\n\t\f\t\16\t\u0089\13\t\3\t\3\t\5\t\u008d") + buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") + buf.write("\t\31\3\2\3\2\7\2\65\n\2\f\2\16\28\13\2\3\3\3\3\7\3<\n") + buf.write("\3\f\3\16\3?\13\3\3\4\3\4\3\4\3\4\5\4E\n\4\3\5\5\5H\n") + buf.write("\5\3\5\7\5K\n\5\f\5\16\5N\13\5\3\5\3\5\3\5\3\5\5\5T\n") + buf.write("\5\3\6\3\6\3\6\5\6Y\n\6\3\7\5\7\\\n\7\3\7\7\7_\n\7\f\7") + buf.write("\16\7b\13\7\3\7\3\7\3\7\3\7\7\7h\n\7\f\7\16\7k\13\7\3") + buf.write("\7\3\7\5\7o\n\7\3\b\3\b\3\b\5\bt\n\b\3\t\5\tw\n\t\3\t") + buf.write("\7\tz\n\t\f\t\16\t}\13\t\3\t\3\t\5\t\u0081\n\t\3\t\3\t") + buf.write("\3\t\7\t\u0086\n\t\f\t\16\t\u0089\13\t\3\t\3\t\5\t\u008d") buf.write("\n\t\3\n\5\n\u0090\n\n\3\n\7\n\u0093\n\n\f\n\16\n\u0096") - buf.write("\13\n\3\n\5\n\u0099\n\n\3\n\3\n\3\n\5\n\u009e\n\n\3\13") - buf.write("\3\13\3\13\5\13\u00a3\n\13\3\f\3\f\3\f\7\f\u00a8\n\f\f") - buf.write("\f\16\f\u00ab\13\f\3\f\3\f\3\r\3\r\3\r\5\r\u00b2\n\r\3") - buf.write("\16\3\16\3\16\3\16\5\16\u00b8\n\16\3\17\3\17\3\20\3\20") - buf.write("\3\20\3\20\3\20\5\20\u00c1\n\20\3\21\3\21\3\21\3\21\3") - buf.write("\21\3\22\3\22\3\22\3\22\3\22\3\23\5\23\u00ce\n\23\3\23") - buf.write("\7\23\u00d1\n\23\f\23\16\23\u00d4\13\23\3\23\3\23\3\23") - buf.write("\3\23\7\23\u00da\n\23\f\23\16\23\u00dd\13\23\3\23\3\23") - buf.write("\5\23\u00e1\n\23\3\24\5\24\u00e4\n\24\3\24\7\24\u00e7") - buf.write("\n\24\f\24\16\24\u00ea\13\24\3\24\3\24\3\24\5\24\u00ef") - buf.write("\n\24\3\25\5\25\u00f2\n\25\3\25\7\25\u00f5\n\25\f\25\16") - buf.write("\25\u00f8\13\25\3\25\3\25\3\25\3\25\7\25\u00fe\n\25\f") - buf.write("\25\16\25\u0101\13\25\3\25\3\25\5\25\u0105\n\25\3\26\3") - buf.write("\26\5\26\u0109\n\26\3\27\5\27\u010c\n\27\3\27\7\27\u010f") - buf.write("\n\27\f\27\16\27\u0112\13\27\3\27\3\27\3\27\5\27\u0117") - buf.write("\n\27\3\27\5\27\u011a\n\27\3\30\3\30\5\30\u011e\n\30\3") - buf.write("\30\2\2\31\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$") - buf.write("&(*,.\2\2\u013a\2\60\3\2\2\2\4\67\3\2\2\2\6>\3\2\2\2\b") - buf.write("E\3\2\2\2\nV\3\2\2\2\fY\3\2\2\2\16p\3\2\2\2\20s\3\2\2") - buf.write("\2\22\u008f\3\2\2\2\24\u009f\3\2\2\2\26\u00a4\3\2\2\2") - buf.write("\30\u00ae\3\2\2\2\32\u00b7\3\2\2\2\34\u00b9\3\2\2\2\36") - buf.write("\u00c0\3\2\2\2 \u00c2\3\2\2\2\"\u00c7\3\2\2\2$\u00cd\3") - buf.write("\2\2\2&\u00e3\3\2\2\2(\u00f1\3\2\2\2*\u0108\3\2\2\2,\u010b") - buf.write("\3\2\2\2.\u011d\3\2\2\2\60\64\5\4\3\2\61\63\5\n\6\2\62") - buf.write("\61\3\2\2\2\63\66\3\2\2\2\64\62\3\2\2\2\64\65\3\2\2\2") - buf.write("\65\3\3\2\2\2\66\64\3\2\2\2\67;\5\b\5\28:\5\6\4\298\3") - buf.write("\2\2\2:=\3\2\2\2;9\3\2\2\2;<\3\2\2\2<\5\3\2\2\2=;\3\2") - buf.write("\2\2>?\7\3\2\2?@\7\37\2\2@B\7 \2\2AC\7\4\2\2BA\3\2\2\2") - buf.write("BC\3\2\2\2C\7\3\2\2\2DF\7!\2\2ED\3\2\2\2EF\3\2\2\2FJ\3") - buf.write("\2\2\2GI\5\26\f\2HG\3\2\2\2IL\3\2\2\2JH\3\2\2\2JK\3\2") - buf.write("\2\2KM\3\2\2\2LJ\3\2\2\2MN\7\5\2\2NO\7\37\2\2OQ\7 \2\2") - buf.write("PR\7\4\2\2QP\3\2\2\2QR\3\2\2\2R\t\3\2\2\2SW\5\f\7\2TW") - buf.write("\5$\23\2UW\5(\25\2VS\3\2\2\2VT\3\2\2\2VU\3\2\2\2W\13\3") - buf.write("\2\2\2XZ\7!\2\2YX\3\2\2\2YZ\3\2\2\2Z^\3\2\2\2[]\5\26\f") - buf.write("\2\\[\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2_a\3\2\2\2") - buf.write("`^\3\2\2\2ab\7\6\2\2bc\7\37\2\2cg\7\7\2\2df\5\16\b\2e") - buf.write("d\3\2\2\2fi\3\2\2\2ge\3\2\2\2gh\3\2\2\2hj\3\2\2\2ig\3") - buf.write("\2\2\2jl\7\b\2\2km\7\4\2\2lk\3\2\2\2lm\3\2\2\2m\r\3\2") - buf.write("\2\2nq\5\20\t\2oq\5\22\n\2pn\3\2\2\2po\3\2\2\2q\17\3\2") - buf.write("\2\2rt\7!\2\2sr\3\2\2\2st\3\2\2\2tx\3\2\2\2uw\5\26\f\2") - buf.write("vu\3\2\2\2wz\3\2\2\2xv\3\2\2\2xy\3\2\2\2y|\3\2\2\2zx\3") - buf.write("\2\2\2{}\7\t\2\2|{\3\2\2\2|}\3\2\2\2}\u0080\3\2\2\2~\u0081") - buf.write("\5\32\16\2\177\u0081\7\n\2\2\u0080~\3\2\2\2\u0080\177") - buf.write("\3\2\2\2\u0081\u0082\3\2\2\2\u0082\u0083\7\37\2\2\u0083") - buf.write("\u0087\7\13\2\2\u0084\u0086\5\24\13\2\u0085\u0084\3\2") - buf.write("\2\2\u0086\u0089\3\2\2\2\u0087\u0085\3\2\2\2\u0087\u0088") - buf.write("\3\2\2\2\u0088\u008a\3\2\2\2\u0089\u0087\3\2\2\2\u008a") - buf.write("\u008c\7\f\2\2\u008b\u008d\7\4\2\2\u008c\u008b\3\2\2\2") - buf.write("\u008c\u008d\3\2\2\2\u008d\21\3\2\2\2\u008e\u0090\7!\2") - buf.write("\2\u008f\u008e\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u0094") - buf.write("\3\2\2\2\u0091\u0093\5\26\f\2\u0092\u0091\3\2\2\2\u0093") - buf.write("\u0096\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0095\3\2\2\2") - buf.write("\u0095\u0098\3\2\2\2\u0096\u0094\3\2\2\2\u0097\u0099\7") - buf.write("\r\2\2\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099\u009a") - buf.write("\3\2\2\2\u009a\u009b\5\32\16\2\u009b\u009d\7\37\2\2\u009c") - buf.write("\u009e\7\4\2\2\u009d\u009c\3\2\2\2\u009d\u009e\3\2\2\2") - buf.write("\u009e\23\3\2\2\2\u009f\u00a0\5\32\16\2\u00a0\u00a2\7") - buf.write("\37\2\2\u00a1\u00a3\7\16\2\2\u00a2\u00a1\3\2\2\2\u00a2") - buf.write("\u00a3\3\2\2\2\u00a3\25\3\2\2\2\u00a4\u00a5\7\36\2\2\u00a5") - buf.write("\u00a9\7\13\2\2\u00a6\u00a8\5\30\r\2\u00a7\u00a6\3\2\2") - buf.write("\2\u00a8\u00ab\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa") - buf.write("\3\2\2\2\u00aa\u00ac\3\2\2\2\u00ab\u00a9\3\2\2\2\u00ac") - buf.write("\u00ad\7\f\2\2\u00ad\27\3\2\2\2\u00ae\u00b1\7\37\2\2\u00af") - buf.write("\u00b0\7\17\2\2\u00b0\u00b2\7\37\2\2\u00b1\u00af\3\2\2") - buf.write("\2\u00b1\u00b2\3\2\2\2\u00b2\31\3\2\2\2\u00b3\u00b8\5") - buf.write("\36\20\2\u00b4\u00b8\5\34\17\2\u00b5\u00b8\5 \21\2\u00b6") - buf.write("\u00b8\5\"\22\2\u00b7\u00b3\3\2\2\2\u00b7\u00b4\3\2\2") - buf.write("\2\u00b7\u00b5\3\2\2\2\u00b7\u00b6\3\2\2\2\u00b8\33\3") - buf.write("\2\2\2\u00b9\u00ba\7\37\2\2\u00ba\35\3\2\2\2\u00bb\u00c1") - buf.write("\7\20\2\2\u00bc\u00c1\7\21\2\2\u00bd\u00c1\7\22\2\2\u00be") - buf.write("\u00c1\7\23\2\2\u00bf\u00c1\7\24\2\2\u00c0\u00bb\3\2\2") - buf.write("\2\u00c0\u00bc\3\2\2\2\u00c0\u00bd\3\2\2\2\u00c0\u00be") - buf.write("\3\2\2\2\u00c0\u00bf\3\2\2\2\u00c1\37\3\2\2\2\u00c2\u00c3") - buf.write("\7\25\2\2\u00c3\u00c4\7\26\2\2\u00c4\u00c5\5\32\16\2\u00c5") - buf.write("\u00c6\7\27\2\2\u00c6!\3\2\2\2\u00c7\u00c8\7\30\2\2\u00c8") - buf.write("\u00c9\7\26\2\2\u00c9\u00ca\5\32\16\2\u00ca\u00cb\7\27") - buf.write("\2\2\u00cb#\3\2\2\2\u00cc\u00ce\7!\2\2\u00cd\u00cc\3\2") - buf.write("\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d2\3\2\2\2\u00cf\u00d1") - buf.write("\5\26\f\2\u00d0\u00cf\3\2\2\2\u00d1\u00d4\3\2\2\2\u00d2") - buf.write("\u00d0\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00d5\3\2\2\2") - buf.write("\u00d4\u00d2\3\2\2\2\u00d5\u00d6\7\31\2\2\u00d6\u00d7") - buf.write("\7\37\2\2\u00d7\u00db\7\7\2\2\u00d8\u00da\5&\24\2\u00d9") - buf.write("\u00d8\3\2\2\2\u00da\u00dd\3\2\2\2\u00db\u00d9\3\2\2\2") - buf.write("\u00db\u00dc\3\2\2\2\u00dc\u00de\3\2\2\2\u00dd\u00db\3") - buf.write("\2\2\2\u00de\u00e0\7\b\2\2\u00df\u00e1\7\4\2\2\u00e0\u00df") - buf.write("\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1%\3\2\2\2\u00e2\u00e4") + buf.write("\13\n\3\n\3\n\3\n\3\n\7\n\u009c\n\n\f\n\16\n\u009f\13") + buf.write("\n\3\n\3\n\5\n\u00a3\n\n\3\13\5\13\u00a6\n\13\3\13\7\13") + buf.write("\u00a9\n\13\f\13\16\13\u00ac\13\13\3\13\5\13\u00af\n\13") + buf.write("\3\13\3\13\3\13\5\13\u00b4\n\13\3\f\3\f\3\f\5\f\u00b9") + buf.write("\n\f\3\r\3\r\3\r\7\r\u00be\n\r\f\r\16\r\u00c1\13\r\3\r") + buf.write("\3\r\3\16\3\16\3\16\5\16\u00c8\n\16\3\17\3\17\3\17\3\17") + buf.write("\5\17\u00ce\n\17\3\20\3\20\3\21\3\21\3\21\3\21\3\21\5") + buf.write("\21\u00d7\n\21\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23") + buf.write("\3\23\3\23\3\24\5\24\u00e4\n\24\3\24\7\24\u00e7\n\24\f") + buf.write("\24\16\24\u00ea\13\24\3\24\3\24\3\24\3\24\7\24\u00f0\n") + buf.write("\24\f\24\16\24\u00f3\13\24\3\24\3\24\5\24\u00f7\n\24\3") + buf.write("\25\5\25\u00fa\n\25\3\25\7\25\u00fd\n\25\f\25\16\25\u0100") + buf.write("\13\25\3\25\3\25\3\25\5\25\u0105\n\25\3\26\5\26\u0108") + buf.write("\n\26\3\26\7\26\u010b\n\26\f\26\16\26\u010e\13\26\3\26") + buf.write("\3\26\3\26\3\26\7\26\u0114\n\26\f\26\16\26\u0117\13\26") + buf.write("\3\26\3\26\5\26\u011b\n\26\3\27\3\27\5\27\u011f\n\27\3") + buf.write("\30\5\30\u0122\n\30\3\30\7\30\u0125\n\30\f\30\16\30\u0128") + buf.write("\13\30\3\30\3\30\3\30\5\30\u012d\n\30\3\30\5\30\u0130") + buf.write("\n\30\3\31\3\31\5\31\u0134\n\31\3\31\2\2\32\2\4\6\b\n") + buf.write("\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\2\2\u0153\2") + buf.write("\62\3\2\2\2\49\3\2\2\2\6@\3\2\2\2\bG\3\2\2\2\nX\3\2\2") + buf.write("\2\f[\3\2\2\2\16s\3\2\2\2\20v\3\2\2\2\22\u008f\3\2\2\2") + buf.write("\24\u00a5\3\2\2\2\26\u00b5\3\2\2\2\30\u00ba\3\2\2\2\32") + buf.write("\u00c4\3\2\2\2\34\u00cd\3\2\2\2\36\u00cf\3\2\2\2 \u00d6") + buf.write("\3\2\2\2\"\u00d8\3\2\2\2$\u00dd\3\2\2\2&\u00e3\3\2\2\2") + buf.write("(\u00f9\3\2\2\2*\u0107\3\2\2\2,\u011e\3\2\2\2.\u0121\3") + buf.write("\2\2\2\60\u0133\3\2\2\2\62\66\5\4\3\2\63\65\5\n\6\2\64") + buf.write("\63\3\2\2\2\658\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2\67") + buf.write("\3\3\2\2\28\66\3\2\2\29=\5\b\5\2:<\5\6\4\2;:\3\2\2\2<") + buf.write("?\3\2\2\2=;\3\2\2\2=>\3\2\2\2>\5\3\2\2\2?=\3\2\2\2@A\7") + buf.write("\3\2\2AB\7\37\2\2BD\7 \2\2CE\7\4\2\2DC\3\2\2\2DE\3\2\2") + buf.write("\2E\7\3\2\2\2FH\7!\2\2GF\3\2\2\2GH\3\2\2\2HL\3\2\2\2I") + buf.write("K\5\30\r\2JI\3\2\2\2KN\3\2\2\2LJ\3\2\2\2LM\3\2\2\2MO\3") + buf.write("\2\2\2NL\3\2\2\2OP\7\5\2\2PQ\7\37\2\2QS\7 \2\2RT\7\4\2") + buf.write("\2SR\3\2\2\2ST\3\2\2\2T\t\3\2\2\2UY\5\f\7\2VY\5&\24\2") + buf.write("WY\5*\26\2XU\3\2\2\2XV\3\2\2\2XW\3\2\2\2Y\13\3\2\2\2Z") + buf.write("\\\7!\2\2[Z\3\2\2\2[\\\3\2\2\2\\`\3\2\2\2]_\5\30\r\2^") + buf.write("]\3\2\2\2_b\3\2\2\2`^\3\2\2\2`a\3\2\2\2ac\3\2\2\2b`\3") + buf.write("\2\2\2cd\7\6\2\2de\7\37\2\2ei\7\7\2\2fh\5\16\b\2gf\3\2") + buf.write("\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2jl\3\2\2\2ki\3\2\2\2") + buf.write("ln\7\b\2\2mo\7\4\2\2nm\3\2\2\2no\3\2\2\2o\r\3\2\2\2pt") + buf.write("\5\20\t\2qt\5\24\13\2rt\5\22\n\2sp\3\2\2\2sq\3\2\2\2s") + buf.write("r\3\2\2\2t\17\3\2\2\2uw\7!\2\2vu\3\2\2\2vw\3\2\2\2w{\3") + buf.write("\2\2\2xz\5\30\r\2yx\3\2\2\2z}\3\2\2\2{y\3\2\2\2{|\3\2") + buf.write("\2\2|\u0080\3\2\2\2}{\3\2\2\2~\u0081\5\34\17\2\177\u0081") + buf.write("\7\t\2\2\u0080~\3\2\2\2\u0080\177\3\2\2\2\u0081\u0082") + buf.write("\3\2\2\2\u0082\u0083\7\37\2\2\u0083\u0087\7\n\2\2\u0084") + buf.write("\u0086\5\26\f\2\u0085\u0084\3\2\2\2\u0086\u0089\3\2\2") + buf.write("\2\u0087\u0085\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u008a") + buf.write("\3\2\2\2\u0089\u0087\3\2\2\2\u008a\u008c\7\13\2\2\u008b") + buf.write("\u008d\7\4\2\2\u008c\u008b\3\2\2\2\u008c\u008d\3\2\2\2") + buf.write("\u008d\21\3\2\2\2\u008e\u0090\7!\2\2\u008f\u008e\3\2\2") + buf.write("\2\u008f\u0090\3\2\2\2\u0090\u0094\3\2\2\2\u0091\u0093") + buf.write("\5\30\r\2\u0092\u0091\3\2\2\2\u0093\u0096\3\2\2\2\u0094") + buf.write("\u0092\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0097\3\2\2\2") + buf.write("\u0096\u0094\3\2\2\2\u0097\u0098\7\f\2\2\u0098\u0099\7") + buf.write("\37\2\2\u0099\u009d\7\n\2\2\u009a\u009c\5\26\f\2\u009b") + buf.write("\u009a\3\2\2\2\u009c\u009f\3\2\2\2\u009d\u009b\3\2\2\2") + buf.write("\u009d\u009e\3\2\2\2\u009e\u00a0\3\2\2\2\u009f\u009d\3") + buf.write("\2\2\2\u00a0\u00a2\7\13\2\2\u00a1\u00a3\7\4\2\2\u00a2") + buf.write("\u00a1\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\23\3\2\2\2\u00a4") + buf.write("\u00a6\7!\2\2\u00a5\u00a4\3\2\2\2\u00a5\u00a6\3\2\2\2") + buf.write("\u00a6\u00aa\3\2\2\2\u00a7\u00a9\5\30\r\2\u00a8\u00a7") + buf.write("\3\2\2\2\u00a9\u00ac\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa") + buf.write("\u00ab\3\2\2\2\u00ab\u00ae\3\2\2\2\u00ac\u00aa\3\2\2\2") + buf.write("\u00ad\u00af\7\r\2\2\u00ae\u00ad\3\2\2\2\u00ae\u00af\3") + buf.write("\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b1\5\34\17\2\u00b1") + buf.write("\u00b3\7\37\2\2\u00b2\u00b4\7\4\2\2\u00b3\u00b2\3\2\2") + buf.write("\2\u00b3\u00b4\3\2\2\2\u00b4\25\3\2\2\2\u00b5\u00b6\5") + buf.write("\34\17\2\u00b6\u00b8\7\37\2\2\u00b7\u00b9\7\16\2\2\u00b8") + buf.write("\u00b7\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\27\3\2\2\2\u00ba") + buf.write("\u00bb\7\36\2\2\u00bb\u00bf\7\n\2\2\u00bc\u00be\5\32\16") + buf.write("\2\u00bd\u00bc\3\2\2\2\u00be\u00c1\3\2\2\2\u00bf\u00bd") + buf.write("\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c2\3\2\2\2\u00c1") + buf.write("\u00bf\3\2\2\2\u00c2\u00c3\7\13\2\2\u00c3\31\3\2\2\2\u00c4") + buf.write("\u00c7\7\37\2\2\u00c5\u00c6\7\17\2\2\u00c6\u00c8\7\37") + buf.write("\2\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\33") + buf.write("\3\2\2\2\u00c9\u00ce\5 \21\2\u00ca\u00ce\5\36\20\2\u00cb") + buf.write("\u00ce\5\"\22\2\u00cc\u00ce\5$\23\2\u00cd\u00c9\3\2\2") + buf.write("\2\u00cd\u00ca\3\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00cc") + buf.write("\3\2\2\2\u00ce\35\3\2\2\2\u00cf\u00d0\7\37\2\2\u00d0\37") + buf.write("\3\2\2\2\u00d1\u00d7\7\20\2\2\u00d2\u00d7\7\21\2\2\u00d3") + buf.write("\u00d7\7\22\2\2\u00d4\u00d7\7\23\2\2\u00d5\u00d7\7\24") + buf.write("\2\2\u00d6\u00d1\3\2\2\2\u00d6\u00d2\3\2\2\2\u00d6\u00d3") + buf.write("\3\2\2\2\u00d6\u00d4\3\2\2\2\u00d6\u00d5\3\2\2\2\u00d7") + buf.write("!\3\2\2\2\u00d8\u00d9\7\25\2\2\u00d9\u00da\7\26\2\2\u00da") + buf.write("\u00db\5\34\17\2\u00db\u00dc\7\27\2\2\u00dc#\3\2\2\2\u00dd") + buf.write("\u00de\7\30\2\2\u00de\u00df\7\26\2\2\u00df\u00e0\5\34") + buf.write("\17\2\u00e0\u00e1\7\27\2\2\u00e1%\3\2\2\2\u00e2\u00e4") buf.write("\7!\2\2\u00e3\u00e2\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4") - buf.write("\u00e8\3\2\2\2\u00e5\u00e7\5\26\f\2\u00e6\u00e5\3\2\2") + buf.write("\u00e8\3\2\2\2\u00e5\u00e7\5\30\r\2\u00e6\u00e5\3\2\2") buf.write("\2\u00e7\u00ea\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e8\u00e9") buf.write("\3\2\2\2\u00e9\u00eb\3\2\2\2\u00ea\u00e8\3\2\2\2\u00eb") - buf.write("\u00ec\5\32\16\2\u00ec\u00ee\7\37\2\2\u00ed\u00ef\7\4") - buf.write("\2\2\u00ee\u00ed\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\'\3") - buf.write("\2\2\2\u00f0\u00f2\7!\2\2\u00f1\u00f0\3\2\2\2\u00f1\u00f2") - buf.write("\3\2\2\2\u00f2\u00f6\3\2\2\2\u00f3\u00f5\5\26\f\2\u00f4") - buf.write("\u00f3\3\2\2\2\u00f5\u00f8\3\2\2\2\u00f6\u00f4\3\2\2\2") - buf.write("\u00f6\u00f7\3\2\2\2\u00f7\u00f9\3\2\2\2\u00f8\u00f6\3") - buf.write("\2\2\2\u00f9\u00fa\5*\26\2\u00fa\u00fb\7\37\2\2\u00fb") - buf.write("\u00ff\7\7\2\2\u00fc\u00fe\5,\27\2\u00fd\u00fc\3\2\2\2") - buf.write("\u00fe\u0101\3\2\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3") - buf.write("\2\2\2\u0100\u0102\3\2\2\2\u0101\u00ff\3\2\2\2\u0102\u0104") - buf.write("\7\b\2\2\u0103\u0105\7\4\2\2\u0104\u0103\3\2\2\2\u0104") - buf.write("\u0105\3\2\2\2\u0105)\3\2\2\2\u0106\u0109\7\32\2\2\u0107") - buf.write("\u0109\7\33\2\2\u0108\u0106\3\2\2\2\u0108\u0107\3\2\2") - buf.write("\2\u0109+\3\2\2\2\u010a\u010c\7!\2\2\u010b\u010a\3\2\2") - buf.write("\2\u010b\u010c\3\2\2\2\u010c\u0110\3\2\2\2\u010d\u010f") - buf.write("\5\26\f\2\u010e\u010d\3\2\2\2\u010f\u0112\3\2\2\2\u0110") - buf.write("\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0113\3\2\2\2") - buf.write("\u0112\u0110\3\2\2\2\u0113\u0116\7\37\2\2\u0114\u0115") - buf.write("\7\17\2\2\u0115\u0117\5.\30\2\u0116\u0114\3\2\2\2\u0116") - buf.write("\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118\u011a\7\16\2") - buf.write("\2\u0119\u0118\3\2\2\2\u0119\u011a\3\2\2\2\u011a-\3\2") - buf.write("\2\2\u011b\u011e\7\34\2\2\u011c\u011e\7\35\2\2\u011d\u011b") - buf.write("\3\2\2\2\u011d\u011c\3\2\2\2\u011e/\3\2\2\2.\64;BEJQV") - buf.write("Y^glpsx|\u0080\u0087\u008c\u008f\u0094\u0098\u009d\u00a2") - buf.write("\u00a9\u00b1\u00b7\u00c0\u00cd\u00d2\u00db\u00e0\u00e3") - buf.write("\u00e8\u00ee\u00f1\u00f6\u00ff\u0104\u0108\u010b\u0110") - buf.write("\u0116\u0119\u011d") + buf.write("\u00ec\7\31\2\2\u00ec\u00ed\7\37\2\2\u00ed\u00f1\7\7\2") + buf.write("\2\u00ee\u00f0\5(\25\2\u00ef\u00ee\3\2\2\2\u00f0\u00f3") + buf.write("\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2") + buf.write("\u00f4\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\u00f6\7\b\2\2") + buf.write("\u00f5\u00f7\7\4\2\2\u00f6\u00f5\3\2\2\2\u00f6\u00f7\3") + buf.write("\2\2\2\u00f7\'\3\2\2\2\u00f8\u00fa\7!\2\2\u00f9\u00f8") + buf.write("\3\2\2\2\u00f9\u00fa\3\2\2\2\u00fa\u00fe\3\2\2\2\u00fb") + buf.write("\u00fd\5\30\r\2\u00fc\u00fb\3\2\2\2\u00fd\u0100\3\2\2") + buf.write("\2\u00fe\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0101") + buf.write("\3\2\2\2\u0100\u00fe\3\2\2\2\u0101\u0102\5\34\17\2\u0102") + buf.write("\u0104\7\37\2\2\u0103\u0105\7\4\2\2\u0104\u0103\3\2\2") + buf.write("\2\u0104\u0105\3\2\2\2\u0105)\3\2\2\2\u0106\u0108\7!\2") + buf.write("\2\u0107\u0106\3\2\2\2\u0107\u0108\3\2\2\2\u0108\u010c") + buf.write("\3\2\2\2\u0109\u010b\5\30\r\2\u010a\u0109\3\2\2\2\u010b") + buf.write("\u010e\3\2\2\2\u010c\u010a\3\2\2\2\u010c\u010d\3\2\2\2") + buf.write("\u010d\u010f\3\2\2\2\u010e\u010c\3\2\2\2\u010f\u0110\5") + buf.write(",\27\2\u0110\u0111\7\37\2\2\u0111\u0115\7\7\2\2\u0112") + buf.write("\u0114\5.\30\2\u0113\u0112\3\2\2\2\u0114\u0117\3\2\2\2") + buf.write("\u0115\u0113\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0118\3") + buf.write("\2\2\2\u0117\u0115\3\2\2\2\u0118\u011a\7\b\2\2\u0119\u011b") + buf.write("\7\4\2\2\u011a\u0119\3\2\2\2\u011a\u011b\3\2\2\2\u011b") + buf.write("+\3\2\2\2\u011c\u011f\7\32\2\2\u011d\u011f\7\33\2\2\u011e") + buf.write("\u011c\3\2\2\2\u011e\u011d\3\2\2\2\u011f-\3\2\2\2\u0120") + buf.write("\u0122\7!\2\2\u0121\u0120\3\2\2\2\u0121\u0122\3\2\2\2") + buf.write("\u0122\u0126\3\2\2\2\u0123\u0125\5\30\r\2\u0124\u0123") + buf.write("\3\2\2\2\u0125\u0128\3\2\2\2\u0126\u0124\3\2\2\2\u0126") + buf.write("\u0127\3\2\2\2\u0127\u0129\3\2\2\2\u0128\u0126\3\2\2\2") + buf.write("\u0129\u012c\7\37\2\2\u012a\u012b\7\17\2\2\u012b\u012d") + buf.write("\5\60\31\2\u012c\u012a\3\2\2\2\u012c\u012d\3\2\2\2\u012d") + buf.write("\u012f\3\2\2\2\u012e\u0130\7\16\2\2\u012f\u012e\3\2\2") + buf.write("\2\u012f\u0130\3\2\2\2\u0130/\3\2\2\2\u0131\u0134\7\34") + buf.write("\2\2\u0132\u0134\7\35\2\2\u0133\u0131\3\2\2\2\u0133\u0132") + buf.write("\3\2\2\2\u0134\61\3\2\2\2\61\66=DGLSX[`insv{\u0080\u0087") + buf.write("\u008c\u008f\u0094\u009d\u00a2\u00a5\u00aa\u00ae\u00b3") + buf.write("\u00b8\u00bf\u00c7\u00cd\u00d6\u00e3\u00e8\u00f1\u00f6") + buf.write("\u00f9\u00fe\u0104\u0107\u010c\u0115\u011a\u011e\u0121") + buf.write("\u0126\u012c\u012f\u0133") return buf.getvalue() @@ -150,7 +163,7 @@ class TParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "<INVALID>", "'import'", "';'", "'module'", "'interface'", - "'{'", "'}'", "'event'", "'void'", "'('", "')'", "'readonly'", + "'{'", "'}'", "'void'", "'('", "')'", "'signal'", "'readonly'", "','", "'='", "'bool'", "'int'", "'real'", "'string'", "'var'", "'list'", "'<'", "'>'", "'model'", "'struct'", "'enum'", "'flag'" ] @@ -173,28 +186,30 @@ class TParser ( Parser ): RULE_interfaceSymbol = 5 RULE_interfaceMemberSymbol = 6 RULE_operationSymbol = 7 - RULE_propertySymbol = 8 - RULE_operationParameterSymbol = 9 - RULE_tagSymbol = 10 - RULE_tagAttributeSymbol = 11 - RULE_typeSymbol = 12 - RULE_complexTypeSymbol = 13 - RULE_primitiveTypeSymbol = 14 - RULE_listTypeSymbol = 15 - RULE_modelTypeSymbol = 16 - RULE_structSymbol = 17 - RULE_structFieldSymbol = 18 - RULE_enumSymbol = 19 - RULE_enumTypeSymbol = 20 - RULE_enumMemberSymbol = 21 - RULE_intSymbol = 22 + RULE_signalSymbol = 8 + RULE_propertySymbol = 9 + RULE_operationParameterSymbol = 10 + RULE_tagSymbol = 11 + RULE_tagAttributeSymbol = 12 + RULE_typeSymbol = 13 + RULE_complexTypeSymbol = 14 + RULE_primitiveTypeSymbol = 15 + RULE_listTypeSymbol = 16 + RULE_modelTypeSymbol = 17 + RULE_structSymbol = 18 + RULE_structFieldSymbol = 19 + RULE_enumSymbol = 20 + RULE_enumTypeSymbol = 21 + RULE_enumMemberSymbol = 22 + RULE_intSymbol = 23 ruleNames = [ "documentSymbol", "headerSymbol", "importSymbol", "moduleSymbol", "definitionSymbol", "interfaceSymbol", "interfaceMemberSymbol", - "operationSymbol", "propertySymbol", "operationParameterSymbol", - "tagSymbol", "tagAttributeSymbol", "typeSymbol", "complexTypeSymbol", - "primitiveTypeSymbol", "listTypeSymbol", "modelTypeSymbol", - "structSymbol", "structFieldSymbol", "enumSymbol", "enumTypeSymbol", + "operationSymbol", "signalSymbol", "propertySymbol", + "operationParameterSymbol", "tagSymbol", "tagAttributeSymbol", + "typeSymbol", "complexTypeSymbol", "primitiveTypeSymbol", + "listTypeSymbol", "modelTypeSymbol", "structSymbol", + "structFieldSymbol", "enumSymbol", "enumTypeSymbol", "enumMemberSymbol", "intSymbol" ] EOF = Token.EOF @@ -285,15 +300,15 @@ class TParser ( Parser ): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 46 + self.state = 48 self.headerSymbol() - self.state = 50 + self.state = 52 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__3) | (1 << TParser.T__22) | (1 << TParser.T__23) | (1 << TParser.T__24) | (1 << TParser.TAGIDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): - self.state = 47 + self.state = 49 self.definitionSymbol() - self.state = 52 + self.state = 54 self._errHandler.sync(self) _la = self._input.LA(1) @@ -349,15 +364,15 @@ class TParser ( Parser ): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 53 + self.state = 55 self.moduleSymbol() - self.state = 57 + self.state = 59 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.T__0: - self.state = 54 + self.state = 56 self.importSymbol() - self.state = 59 + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) @@ -410,17 +425,17 @@ class TParser ( Parser ): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 60 + self.state = 62 self.match(TParser.T__0) - self.state = 61 + self.state = 63 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 62 - localctx.version = self.match(TParser.VERSION) self.state = 64 + localctx.version = self.match(TParser.VERSION) + self.state = 66 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 63 + self.state = 65 self.match(TParser.T__1) @@ -484,35 +499,35 @@ class TParser ( Parser ): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 67 + self.state = 69 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 66 + self.state = 68 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 72 + self.state = 74 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 69 + self.state = 71 self.tagSymbol() - self.state = 74 + self.state = 76 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 75 + self.state = 77 self.match(TParser.T__2) - self.state = 76 + self.state = 78 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 77 - localctx.version = self.match(TParser.VERSION) self.state = 79 + localctx.version = self.match(TParser.VERSION) + self.state = 81 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 78 + self.state = 80 self.match(TParser.T__1) @@ -567,24 +582,24 @@ class TParser ( Parser ): localctx = TParser.DefinitionSymbolContext(self, self._ctx, self.state) self.enterRule(localctx, 8, self.RULE_definitionSymbol) try: - self.state = 84 + self.state = 86 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,6,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 81 + self.state = 83 self.interfaceSymbol() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 82 + self.state = 84 self.structSymbol() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 83 + self.state = 85 self.enumSymbol() pass @@ -652,47 +667,47 @@ class TParser ( Parser ): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 87 + self.state = 89 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 86 + self.state = 88 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 92 + self.state = 94 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 89 + self.state = 91 self.tagSymbol() - self.state = 94 + self.state = 96 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 95 + self.state = 97 self.match(TParser.T__3) - self.state = 96 + self.state = 98 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 97 + self.state = 99 self.match(TParser.T__4) - self.state = 101 + self.state = 103 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__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__21) | (1 << TParser.TAGIDENTIFIER) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): - self.state = 98 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__6) | (1 << TParser.T__9) | (1 << TParser.T__10) | (1 << TParser.T__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__21) | (1 << TParser.TAGIDENTIFIER) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): + self.state = 100 self.interfaceMemberSymbol() - self.state = 103 + self.state = 105 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 104 - self.match(TParser.T__5) self.state = 106 + self.match(TParser.T__5) + self.state = 108 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 105 + self.state = 107 self.match(TParser.T__1) @@ -718,6 +733,10 @@ class TParser ( Parser ): return self.getTypedRuleContext(TParser.PropertySymbolContext,0) + def signalSymbol(self): + return self.getTypedRuleContext(TParser.SignalSymbolContext,0) + + def getRuleIndex(self): return TParser.RULE_interfaceMemberSymbol @@ -743,21 +762,27 @@ class TParser ( Parser ): localctx = TParser.InterfaceMemberSymbolContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_interfaceMemberSymbol) try: - self.state = 110 + self.state = 113 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 108 + self.state = 110 self.operationSymbol() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 109 + self.state = 111 self.propertySymbol() pass + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 112 + self.signalSymbol() + pass + except RecognitionException as re: localctx.exception = re @@ -773,7 +798,6 @@ class TParser ( Parser ): super().__init__(parent, invokingState) self.parser = parser self.comment = None # Token - self.isEvent = None # Token self.name = None # Token def IDENTIFIER(self): @@ -827,32 +851,24 @@ class TParser ( Parser ): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 113 + self.state = 116 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 112 + self.state = 115 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 118 + self.state = 121 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 115 + self.state = 118 self.tagSymbol() - self.state = 120 + self.state = 123 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 122 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==TParser.T__6: - self.state = 121 - localctx.isEvent = self.match(TParser.T__6) - - self.state = 126 self._errHandler.sync(self) token = self._input.LA(1) @@ -860,9 +876,9 @@ class TParser ( Parser ): self.state = 124 self.typeSymbol() pass - elif token in [TParser.T__7]: + elif token in [TParser.T__6]: self.state = 125 - self.match(TParser.T__7) + self.match(TParser.T__6) pass else: raise NoViableAltException(self) @@ -870,7 +886,7 @@ class TParser ( Parser ): self.state = 128 localctx.name = self.match(TParser.IDENTIFIER) self.state = 129 - self.match(TParser.T__8) + self.match(TParser.T__7) self.state = 133 self._errHandler.sync(self) _la = self._input.LA(1) @@ -882,7 +898,7 @@ class TParser ( Parser ): _la = self._input.LA(1) self.state = 136 - self.match(TParser.T__9) + self.match(TParser.T__8) self.state = 138 self._errHandler.sync(self) _la = self._input.LA(1) @@ -899,6 +915,113 @@ class TParser ( Parser ): self.exitRule() return localctx + class SignalSymbolContext(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 tagSymbol(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(TParser.TagSymbolContext) + else: + return self.getTypedRuleContext(TParser.TagSymbolContext,i) + + + 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_signalSymbol + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSignalSymbol" ): + listener.enterSignalSymbol(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSignalSymbol" ): + listener.exitSignalSymbol(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSignalSymbol" ): + return visitor.visitSignalSymbol(self) + else: + return visitor.visitChildren(self) + + + + + def signalSymbol(self): + + localctx = TParser.SignalSymbolContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_signalSymbol) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 141 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==TParser.DOCCOMMENT: + self.state = 140 + localctx.comment = self.match(TParser.DOCCOMMENT) + + + self.state = 146 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==TParser.TAGIDENTIFIER: + self.state = 143 + self.tagSymbol() + self.state = 148 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 149 + self.match(TParser.T__9) + self.state = 150 + localctx.name = self.match(TParser.IDENTIFIER) + self.state = 151 + self.match(TParser.T__7) + self.state = 155 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__21) | (1 << TParser.IDENTIFIER))) != 0): + self.state = 152 + self.operationParameterSymbol() + self.state = 157 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 158 + self.match(TParser.T__8) + self.state = 160 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==TParser.T__1: + self.state = 159 + 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): @@ -948,45 +1071,45 @@ class TParser ( Parser ): def propertySymbol(self): localctx = TParser.PropertySymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_propertySymbol) + self.enterRule(localctx, 18, self.RULE_propertySymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 141 + self.state = 163 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 140 + self.state = 162 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 146 + self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 143 + self.state = 165 self.tagSymbol() - self.state = 148 + self.state = 170 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 150 + self.state = 172 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__10: - self.state = 149 + self.state = 171 localctx.isReadOnly = self.match(TParser.T__10) - self.state = 152 + self.state = 174 self.typeSymbol() - self.state = 153 + self.state = 175 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 155 + self.state = 177 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 154 + self.state = 176 self.match(TParser.T__1) @@ -1035,19 +1158,19 @@ class TParser ( Parser ): def operationParameterSymbol(self): localctx = TParser.OperationParameterSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_operationParameterSymbol) + self.enterRule(localctx, 20, self.RULE_operationParameterSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 157 + self.state = 179 self.typeSymbol() - self.state = 158 + self.state = 180 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 160 + self.state = 182 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__11: - self.state = 159 + self.state = 181 self.match(TParser.T__11) @@ -1099,26 +1222,26 @@ class TParser ( Parser ): def tagSymbol(self): localctx = TParser.TagSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_tagSymbol) + self.enterRule(localctx, 22, self.RULE_tagSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 162 + self.state = 184 localctx.name = self.match(TParser.TAGIDENTIFIER) - self.state = 163 - self.match(TParser.T__8) - self.state = 167 + self.state = 185 + self.match(TParser.T__7) + self.state = 189 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.IDENTIFIER: - self.state = 164 + self.state = 186 self.tagAttributeSymbol() - self.state = 169 + self.state = 191 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 170 - self.match(TParser.T__9) + self.state = 192 + self.match(TParser.T__8) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1164,19 +1287,19 @@ class TParser ( Parser ): def tagAttributeSymbol(self): localctx = TParser.TagAttributeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_tagAttributeSymbol) + self.enterRule(localctx, 24, self.RULE_tagAttributeSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 172 + self.state = 194 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 175 + self.state = 197 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__12: - self.state = 173 + self.state = 195 self.match(TParser.T__12) - self.state = 174 + self.state = 196 localctx.value = self.match(TParser.IDENTIFIER) @@ -1233,29 +1356,29 @@ class TParser ( Parser ): def typeSymbol(self): localctx = TParser.TypeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_typeSymbol) + self.enterRule(localctx, 26, self.RULE_typeSymbol) try: - self.state = 181 + self.state = 203 self._errHandler.sync(self) token = self._input.LA(1) if token in [TParser.T__13, TParser.T__14, TParser.T__15, TParser.T__16, TParser.T__17]: self.enterOuterAlt(localctx, 1) - self.state = 177 + self.state = 199 self.primitiveTypeSymbol() pass elif token in [TParser.IDENTIFIER]: self.enterOuterAlt(localctx, 2) - self.state = 178 + self.state = 200 self.complexTypeSymbol() pass elif token in [TParser.T__18]: self.enterOuterAlt(localctx, 3) - self.state = 179 + self.state = 201 self.listTypeSymbol() pass elif token in [TParser.T__21]: self.enterOuterAlt(localctx, 4) - self.state = 180 + self.state = 202 self.modelTypeSymbol() pass else: @@ -1302,10 +1425,10 @@ class TParser ( Parser ): def complexTypeSymbol(self): localctx = TParser.ComplexTypeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_complexTypeSymbol) + self.enterRule(localctx, 28, self.RULE_complexTypeSymbol) try: self.enterOuterAlt(localctx, 1) - self.state = 183 + self.state = 205 localctx.name = self.match(TParser.IDENTIFIER) except RecognitionException as re: localctx.exception = re @@ -1346,34 +1469,34 @@ class TParser ( Parser ): def primitiveTypeSymbol(self): localctx = TParser.PrimitiveTypeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 28, self.RULE_primitiveTypeSymbol) + self.enterRule(localctx, 30, self.RULE_primitiveTypeSymbol) try: - self.state = 190 + self.state = 212 self._errHandler.sync(self) token = self._input.LA(1) if token in [TParser.T__13]: self.enterOuterAlt(localctx, 1) - self.state = 185 + self.state = 207 localctx.name = self.match(TParser.T__13) pass elif token in [TParser.T__14]: self.enterOuterAlt(localctx, 2) - self.state = 186 + self.state = 208 localctx.name = self.match(TParser.T__14) pass elif token in [TParser.T__15]: self.enterOuterAlt(localctx, 3) - self.state = 187 + self.state = 209 localctx.name = self.match(TParser.T__15) pass elif token in [TParser.T__16]: self.enterOuterAlt(localctx, 4) - self.state = 188 + self.state = 210 localctx.name = self.match(TParser.T__16) pass elif token in [TParser.T__17]: self.enterOuterAlt(localctx, 5) - self.state = 189 + self.state = 211 localctx.name = self.match(TParser.T__17) pass else: @@ -1421,16 +1544,16 @@ class TParser ( Parser ): def listTypeSymbol(self): localctx = TParser.ListTypeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 30, self.RULE_listTypeSymbol) + self.enterRule(localctx, 32, self.RULE_listTypeSymbol) try: self.enterOuterAlt(localctx, 1) - self.state = 192 + self.state = 214 self.match(TParser.T__18) - self.state = 193 + self.state = 215 self.match(TParser.T__19) - self.state = 194 + self.state = 216 localctx.valueType = self.typeSymbol() - self.state = 195 + self.state = 217 self.match(TParser.T__20) except RecognitionException as re: localctx.exception = re @@ -1474,16 +1597,16 @@ class TParser ( Parser ): def modelTypeSymbol(self): localctx = TParser.ModelTypeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 32, self.RULE_modelTypeSymbol) + self.enterRule(localctx, 34, self.RULE_modelTypeSymbol) try: self.enterOuterAlt(localctx, 1) - self.state = 197 + self.state = 219 self.match(TParser.T__21) - self.state = 198 + self.state = 220 self.match(TParser.T__19) - self.state = 199 + self.state = 221 localctx.valueType = self.typeSymbol() - self.state = 200 + self.state = 222 self.match(TParser.T__20) except RecognitionException as re: localctx.exception = re @@ -1544,51 +1667,51 @@ class TParser ( Parser ): def structSymbol(self): localctx = TParser.StructSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 34, self.RULE_structSymbol) + self.enterRule(localctx, 36, self.RULE_structSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 203 + self.state = 225 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 202 + self.state = 224 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 208 + self.state = 230 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 205 + self.state = 227 self.tagSymbol() - self.state = 210 + self.state = 232 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 211 + self.state = 233 self.match(TParser.T__22) - self.state = 212 + self.state = 234 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 213 + self.state = 235 self.match(TParser.T__4) - self.state = 217 + self.state = 239 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__13) | (1 << TParser.T__14) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__21) | (1 << TParser.TAGIDENTIFIER) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): - self.state = 214 + self.state = 236 self.structFieldSymbol() - self.state = 219 + self.state = 241 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 220 + self.state = 242 self.match(TParser.T__5) - self.state = 222 + self.state = 244 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 221 + self.state = 243 self.match(TParser.T__1) @@ -1648,37 +1771,37 @@ class TParser ( Parser ): def structFieldSymbol(self): localctx = TParser.StructFieldSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 36, self.RULE_structFieldSymbol) + self.enterRule(localctx, 38, self.RULE_structFieldSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 225 + self.state = 247 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 224 + self.state = 246 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 230 + self.state = 252 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 227 + self.state = 249 self.tagSymbol() - self.state = 232 + self.state = 254 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 233 + self.state = 255 self.typeSymbol() - self.state = 234 + self.state = 256 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 236 + self.state = 258 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 235 + self.state = 257 self.match(TParser.T__1) @@ -1745,51 +1868,51 @@ class TParser ( Parser ): def enumSymbol(self): localctx = TParser.EnumSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 38, self.RULE_enumSymbol) + self.enterRule(localctx, 40, self.RULE_enumSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 239 + self.state = 261 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 238 + self.state = 260 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 244 + self.state = 266 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 241 + self.state = 263 self.tagSymbol() - self.state = 246 + self.state = 268 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 247 + self.state = 269 self.enumTypeSymbol() - self.state = 248 + self.state = 270 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 249 + self.state = 271 self.match(TParser.T__4) - self.state = 253 + self.state = 275 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.TAGIDENTIFIER) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0): - self.state = 250 + self.state = 272 self.enumMemberSymbol() - self.state = 255 + self.state = 277 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 256 + self.state = 278 self.match(TParser.T__5) - self.state = 258 + self.state = 280 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__1: - self.state = 257 + self.state = 279 self.match(TParser.T__1) @@ -1833,19 +1956,19 @@ class TParser ( Parser ): def enumTypeSymbol(self): localctx = TParser.EnumTypeSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 40, self.RULE_enumTypeSymbol) + self.enterRule(localctx, 42, self.RULE_enumTypeSymbol) try: - self.state = 262 + self.state = 284 self._errHandler.sync(self) token = self._input.LA(1) if token in [TParser.T__23]: self.enterOuterAlt(localctx, 1) - self.state = 260 + self.state = 282 localctx.isEnum = self.match(TParser.T__23) pass elif token in [TParser.T__24]: self.enterOuterAlt(localctx, 2) - self.state = 261 + self.state = 283 localctx.isFlag = self.match(TParser.T__24) pass else: @@ -1907,45 +2030,45 @@ class TParser ( Parser ): def enumMemberSymbol(self): localctx = TParser.EnumMemberSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_enumMemberSymbol) + self.enterRule(localctx, 44, self.RULE_enumMemberSymbol) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 265 + self.state = 287 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.DOCCOMMENT: - self.state = 264 + self.state = 286 localctx.comment = self.match(TParser.DOCCOMMENT) - self.state = 270 + self.state = 292 self._errHandler.sync(self) _la = self._input.LA(1) while _la==TParser.TAGIDENTIFIER: - self.state = 267 + self.state = 289 self.tagSymbol() - self.state = 272 + self.state = 294 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 273 + self.state = 295 localctx.name = self.match(TParser.IDENTIFIER) - self.state = 276 + self.state = 298 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__12: - self.state = 274 + self.state = 296 self.match(TParser.T__12) - self.state = 275 + self.state = 297 self.intSymbol() - self.state = 279 + self.state = 301 self._errHandler.sync(self) _la = self._input.LA(1) if _la==TParser.T__11: - self.state = 278 + self.state = 300 self.match(TParser.T__11) @@ -1993,19 +2116,19 @@ class TParser ( Parser ): def intSymbol(self): localctx = TParser.IntSymbolContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_intSymbol) + self.enterRule(localctx, 46, self.RULE_intSymbol) try: - self.state = 283 + self.state = 305 self._errHandler.sync(self) token = self._input.LA(1) if token in [TParser.INTCONSTANT]: self.enterOuterAlt(localctx, 1) - self.state = 281 + self.state = 303 localctx.value = self.match(TParser.INTCONSTANT) pass elif token in [TParser.HEXCONSTANT]: self.enterOuterAlt(localctx, 2) - self.state = 282 + self.state = 304 localctx.value = self.match(TParser.HEXCONSTANT) pass else: diff --git a/qface/idl/parser/TVisitor.py b/qface/idl/parser/TVisitor.py index 64b345a..537146c 100644 --- a/qface/idl/parser/TVisitor.py +++ b/qface/idl/parser/TVisitor.py @@ -49,6 +49,11 @@ class TVisitor(ParseTreeVisitor): return self.visitChildren(ctx) + # Visit a parse tree produced by TParser#signalSymbol. + def visitSignalSymbol(self, ctx:TParser.SignalSymbolContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by TParser#propertySymbol. def visitPropertySymbol(self, ctx:TParser.PropertySymbolContext): return self.visitChildren(ctx) diff --git a/tests/in/com.pelagicore.ivi.tuner.qface b/tests/in/com.pelagicore.ivi.tuner.qface index f8eb4af..765e9f5 100644 --- a/tests/in/com.pelagicore.ivi.tuner.qface +++ b/tests/in/com.pelagicore.ivi.tuner.qface @@ -17,6 +17,9 @@ interface Tuner { list<Station> complexList; model<int> primitiveModel; model<Station> complexModel; + + signal scanFinished(); + signal broadcastMessage(string message); } /** enum State */ diff --git a/tests/in/com.pelagicore.one.qface b/tests/in/com.pelagicore.one.qface index 9203d29..9a4eba0 100644 --- a/tests/in/com.pelagicore.one.qface +++ b/tests/in/com.pelagicore.one.qface @@ -5,7 +5,7 @@ interface OneService { list<StringStruct> messageList; model<StringStruct> messageModel; StringStruct echo(StringStruct message); - event void echoMessage(StringStruct mnessage); + signal echoMessage(StringStruct mnessage); } diff --git a/tests/test_parser.py b/tests/test_parser.py index ebd7e88..8357632 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -56,6 +56,22 @@ def test_property(): assert property.comment == '/** property currentStation */' +def test_operation(): + system = load_tuner() + interface = system.lookup('com.pelagicore.ivi.tuner.Tuner') + operation = interface._operationMap['nextStation'] + assert operation + operation = interface._definitionMap['previousStation'] + assert operation + + +def test_signals(): + system = load_tuner() + interface = system.lookup('com.pelagicore.ivi.tuner.Tuner') + signal = interface._signalMap['scanFinished'] + assert signal + + def test_struct(): system = load_tuner() module = system.lookup('com.pelagicore.ivi.tuner') |