aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>2017-05-09 19:26:06 -0700
committerJuergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>2017-05-09 19:26:06 -0700
commitac7f9099e9d55f06ca5e0669015032978cedf489 (patch)
tree492ed6b3d6d4035e5ef9855ebcb2050f71333537
parent8cbf5739233bcc2af284ac20712aeeaaf7be0592 (diff)
parent305eec8ea3a50c0c823144e105c7d27b1087e173 (diff)
Merge branch 'develop' of github.com:Pelagicore/qface into develop
-rw-r--r--docs/json.rst6
-rw-r--r--qface/helper/doc.py2
-rw-r--r--qface/idl/listener.py3
-rw-r--r--qface/idl/parser/T.g46
-rw-r--r--qface/idl/parser/T.tokens6
-rw-r--r--qface/idl/parser/TLexer.py136
-rw-r--r--qface/idl/parser/TLexer.tokens6
-rw-r--r--qface/idl/parser/TListener.py9
-rw-r--r--qface/idl/parser/TParser.py785
-rw-r--r--qface/idl/parser/TVisitor.py5
-rw-r--r--qface/idl/profile.py36
-rw-r--r--tests/in/com.pelagicore.ivi.tuner.qface2
-rw-r--r--tests/test_parser.py3
13 files changed, 564 insertions, 441 deletions
diff --git a/docs/json.rst b/docs/json.rst
index 80e07fc..ca7d9e5 100644
--- a/docs/json.rst
+++ b/docs/json.rst
@@ -21,8 +21,8 @@ Then inside the template you can transform any symbol into a JSON string using t
{{module|jsonify}}
-Depending on your need you might want to create a JSON document form the whole system or from each interface or you are just
-interested for example on a JSON representation of a enumeration.
+Depending on your need you might want to create a JSON document from the whole system or from each interface or you are just
+interested on a JSON representation of an enumeration. The portion of the domain model exported to JSON really depends on your custom code generator and on which doamin element you apply the ``jsonify`` filter.
JSON Format
===========
@@ -125,4 +125,4 @@ The following JSON output is generated
]
}
]
- } \ No newline at end of file
+ }
diff --git a/qface/helper/doc.py b/qface/helper/doc.py
index e52b7fd..0935e67 100644
--- a/qface/helper/doc.py
+++ b/qface/helper/doc.py
@@ -37,7 +37,7 @@ class DocObject:
elif attr_type is list:
getattr(self, name).append(value)
else:
- print('documentation tag not supported')
+ print('documentation tag @{0} not supported'.format(name))
@staticmethod
def _translate(name, value):
diff --git a/qface/idl/listener.py b/qface/idl/listener.py
index 3bc7035..8bc6d36 100644
--- a/qface/idl/listener.py
+++ b/qface/idl/listener.py
@@ -152,6 +152,9 @@ class DomainListener(TListener):
assert self.interface
name = ctx.name.text
self.operation = Operation(name, self.interface)
+ modifier = ctx.operationModifierSymbol()
+ if modifier:
+ self.operation.const = bool(modifier.is_const)
self.parse_annotations(ctx, self.operation)
self.parse_type(ctx, self.operation.type)
contextMap[ctx] = self.operation
diff --git a/qface/idl/parser/T.g4 b/qface/idl/parser/T.g4
index d5a7373..9cfe4e7 100644
--- a/qface/idl/parser/T.g4
+++ b/qface/idl/parser/T.g4
@@ -39,7 +39,11 @@ interfaceMemberSymbol
;
operationSymbol
- : comment=DOCCOMMENT? tagSymbol* (typeSymbol | 'void') name=IDENTIFIER '(' operationParameterSymbol* ')' ';'?
+ : comment=DOCCOMMENT? tagSymbol* (typeSymbol | 'void') name=IDENTIFIER '(' operationParameterSymbol* ')' operationModifierSymbol? ';'?
+ ;
+
+operationModifierSymbol
+ : is_const='const'
;
signalSymbol
diff --git a/qface/idl/parser/T.tokens b/qface/idl/parser/T.tokens
index 671abfa..5f94603 100644
--- a/qface/idl/parser/T.tokens
+++ b/qface/idl/parser/T.tokens
@@ -45,9 +45,9 @@ MULTICOMM=37
'void'=8
'('=9
')'=10
-'signal'=11
-'readonly'=12
-'const'=13
+'const'=11
+'signal'=12
+'readonly'=13
','=14
'='=15
'bool'=16
diff --git a/qface/idl/parser/TLexer.py b/qface/idl/parser/TLexer.py
index 19d2828..c6aa4db 100644
--- a/qface/idl/parser/TLexer.py
+++ b/qface/idl/parser/TLexer.py
@@ -16,73 +16,73 @@ def serializedATN():
buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3")
buf.write("\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\b\3\b\3\t")
buf.write("\3\t\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\f\3\f")
- buf.write("\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16")
- buf.write("\3\16\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21")
- buf.write("\3\21\3\21\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23")
- buf.write("\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25")
- buf.write("\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31")
- buf.write("\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32")
- buf.write("\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35")
- buf.write("\3\35\7\35\u00d2\n\35\f\35\16\35\u00d5\13\35\3\36\5\36")
- buf.write("\u00d8\n\36\3\36\6\36\u00db\n\36\r\36\16\36\u00dc\3\37")
- buf.write("\3\37\3\37\3\37\6\37\u00e3\n\37\r\37\16\37\u00e4\3 \3")
- buf.write(" \3 \7 \u00ea\n \f \16 \u00ed\13 \3!\3!\7!\u00f1\n!\f")
- buf.write("!\16!\u00f4\13!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\7#\u00ff")
- buf.write("\n#\f#\16#\u0102\13#\3#\3#\3#\3$\6$\u0108\n$\r$\16$\u0109")
- buf.write("\3$\3$\3%\3%\3%\3%\7%\u0112\n%\f%\16%\u0115\13%\3%\3%")
- buf.write("\3&\3&\3&\3&\7&\u011d\n&\f&\16&\u0120\13&\3&\3&\3&\3&")
- buf.write("\3&\4\u0100\u011e\2\'\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21")
- buf.write("\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24")
- buf.write("\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37")
- buf.write("= ?!A\"C#E$G%I&K\'\3\2\t\4\2\f\f\17\17\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\"\"\u012f\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2")
- buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21")
- buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3")
- buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2")
- buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2")
- buf.write("\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2")
- buf.write("\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2")
- buf.write("\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3")
- buf.write("\2\2\2\2I\3\2\2\2\2K\3\2\2\2\3M\3\2\2\2\5T\3\2\2\2\7V")
- buf.write("\3\2\2\2\t]\3\2\2\2\13g\3\2\2\2\ro\3\2\2\2\17q\3\2\2\2")
- buf.write("\21s\3\2\2\2\23x\3\2\2\2\25z\3\2\2\2\27|\3\2\2\2\31\u0083")
- buf.write("\3\2\2\2\33\u008c\3\2\2\2\35\u0092\3\2\2\2\37\u0094\3")
- buf.write("\2\2\2!\u0096\3\2\2\2#\u009b\3\2\2\2%\u009f\3\2\2\2\'")
- buf.write("\u00a4\3\2\2\2)\u00ab\3\2\2\2+\u00af\3\2\2\2-\u00b4\3")
- buf.write("\2\2\2/\u00b6\3\2\2\2\61\u00b8\3\2\2\2\63\u00be\3\2\2")
- buf.write("\2\65\u00c5\3\2\2\2\67\u00ca\3\2\2\29\u00cf\3\2\2\2;\u00d7")
- buf.write("\3\2\2\2=\u00de\3\2\2\2?\u00e6\3\2\2\2A\u00ee\3\2\2\2")
- buf.write("C\u00f5\3\2\2\2E\u00f9\3\2\2\2G\u0107\3\2\2\2I\u010d\3")
- buf.write("\2\2\2K\u0118\3\2\2\2MN\7k\2\2NO\7o\2\2OP\7r\2\2PQ\7q")
- buf.write("\2\2QR\7t\2\2RS\7v\2\2S\4\3\2\2\2TU\7=\2\2U\6\3\2\2\2")
- buf.write("VW\7o\2\2WX\7q\2\2XY\7f\2\2YZ\7w\2\2Z[\7n\2\2[\\\7g\2")
- buf.write("\2\\\b\3\2\2\2]^\7k\2\2^_\7p\2\2_`\7v\2\2`a\7g\2\2ab\7")
- buf.write("t\2\2bc\7h\2\2cd\7c\2\2de\7e\2\2ef\7g\2\2f\n\3\2\2\2g")
- buf.write("h\7g\2\2hi\7z\2\2ij\7v\2\2jk\7g\2\2kl\7p\2\2lm\7f\2\2")
- buf.write("mn\7u\2\2n\f\3\2\2\2op\7}\2\2p\16\3\2\2\2qr\7\177\2\2")
- buf.write("r\20\3\2\2\2st\7x\2\2tu\7q\2\2uv\7k\2\2vw\7f\2\2w\22\3")
- buf.write("\2\2\2xy\7*\2\2y\24\3\2\2\2z{\7+\2\2{\26\3\2\2\2|}\7u")
- buf.write("\2\2}~\7k\2\2~\177\7i\2\2\177\u0080\7p\2\2\u0080\u0081")
- buf.write("\7c\2\2\u0081\u0082\7n\2\2\u0082\30\3\2\2\2\u0083\u0084")
- buf.write("\7t\2\2\u0084\u0085\7g\2\2\u0085\u0086\7c\2\2\u0086\u0087")
- buf.write("\7f\2\2\u0087\u0088\7q\2\2\u0088\u0089\7p\2\2\u0089\u008a")
- buf.write("\7n\2\2\u008a\u008b\7{\2\2\u008b\32\3\2\2\2\u008c\u008d")
- buf.write("\7e\2\2\u008d\u008e\7q\2\2\u008e\u008f\7p\2\2\u008f\u0090")
- buf.write("\7u\2\2\u0090\u0091\7v\2\2\u0091\34\3\2\2\2\u0092\u0093")
- buf.write("\7.\2\2\u0093\36\3\2\2\2\u0094\u0095\7?\2\2\u0095 \3\2")
- buf.write("\2\2\u0096\u0097\7d\2\2\u0097\u0098\7q\2\2\u0098\u0099")
- buf.write("\7q\2\2\u0099\u009a\7n\2\2\u009a\"\3\2\2\2\u009b\u009c")
- buf.write("\7k\2\2\u009c\u009d\7p\2\2\u009d\u009e\7v\2\2\u009e$\3")
- buf.write("\2\2\2\u009f\u00a0\7t\2\2\u00a0\u00a1\7g\2\2\u00a1\u00a2")
- buf.write("\7c\2\2\u00a2\u00a3\7n\2\2\u00a3&\3\2\2\2\u00a4\u00a5")
- buf.write("\7u\2\2\u00a5\u00a6\7v\2\2\u00a6\u00a7\7t\2\2\u00a7\u00a8")
- buf.write("\7k\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7i\2\2\u00aa(\3")
- buf.write("\2\2\2\u00ab\u00ac\7x\2\2\u00ac\u00ad\7c\2\2\u00ad\u00ae")
- buf.write("\7t\2\2\u00ae*\3\2\2\2\u00af\u00b0\7n\2\2\u00b0\u00b1")
- buf.write("\7k\2\2\u00b1\u00b2\7u\2\2\u00b2\u00b3\7v\2\2\u00b3,\3")
- buf.write("\2\2\2\u00b4\u00b5\7>\2\2\u00b5.\3\2\2\2\u00b6\u00b7\7")
- buf.write("@\2\2\u00b7\60\3\2\2\2\u00b8\u00b9\7o\2\2\u00b9\u00ba")
+ buf.write("\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3")
+ buf.write("\16\3\16\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21")
+ buf.write("\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23")
+ buf.write("\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25")
+ buf.write("\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31")
+ buf.write("\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32")
+ buf.write("\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34")
+ buf.write("\3\35\3\35\7\35\u00d2\n\35\f\35\16\35\u00d5\13\35\3\36")
+ buf.write("\5\36\u00d8\n\36\3\36\6\36\u00db\n\36\r\36\16\36\u00dc")
+ buf.write("\3\37\3\37\3\37\3\37\6\37\u00e3\n\37\r\37\16\37\u00e4")
+ buf.write("\3 \3 \3 \7 \u00ea\n \f \16 \u00ed\13 \3!\3!\7!\u00f1")
+ buf.write("\n!\f!\16!\u00f4\13!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\7")
+ buf.write("#\u00ff\n#\f#\16#\u0102\13#\3#\3#\3#\3$\6$\u0108\n$\r")
+ buf.write("$\16$\u0109\3$\3$\3%\3%\3%\3%\7%\u0112\n%\f%\16%\u0115")
+ buf.write("\13%\3%\3%\3&\3&\3&\3&\7&\u011d\n&\f&\16&\u0120\13&\3")
+ buf.write("&\3&\3&\3&\3&\4\u0100\u011e\2\'\3\3\5\4\7\5\t\6\13\7\r")
+ buf.write("\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!")
+ buf.write("\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67")
+ buf.write("\359\36;\37= ?!A\"C#E$G%I&K\'\3\2\t\4\2\f\f\17\17\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\"\"\u012f\2\3\3\2\2\2\2\5\3\2\2\2\2\7")
+ buf.write("\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2")
+ buf.write("\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2")
+ buf.write("\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2")
+ buf.write("\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2")
+ buf.write("\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63")
+ buf.write("\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2")
+ buf.write("\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2")
+ buf.write("\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\3M\3\2\2\2\5T\3")
+ buf.write("\2\2\2\7V\3\2\2\2\t]\3\2\2\2\13g\3\2\2\2\ro\3\2\2\2\17")
+ buf.write("q\3\2\2\2\21s\3\2\2\2\23x\3\2\2\2\25z\3\2\2\2\27|\3\2")
+ buf.write("\2\2\31\u0082\3\2\2\2\33\u0089\3\2\2\2\35\u0092\3\2\2")
+ buf.write("\2\37\u0094\3\2\2\2!\u0096\3\2\2\2#\u009b\3\2\2\2%\u009f")
+ buf.write("\3\2\2\2\'\u00a4\3\2\2\2)\u00ab\3\2\2\2+\u00af\3\2\2\2")
+ buf.write("-\u00b4\3\2\2\2/\u00b6\3\2\2\2\61\u00b8\3\2\2\2\63\u00be")
+ buf.write("\3\2\2\2\65\u00c5\3\2\2\2\67\u00ca\3\2\2\29\u00cf\3\2")
+ buf.write("\2\2;\u00d7\3\2\2\2=\u00de\3\2\2\2?\u00e6\3\2\2\2A\u00ee")
+ buf.write("\3\2\2\2C\u00f5\3\2\2\2E\u00f9\3\2\2\2G\u0107\3\2\2\2")
+ buf.write("I\u010d\3\2\2\2K\u0118\3\2\2\2MN\7k\2\2NO\7o\2\2OP\7r")
+ buf.write("\2\2PQ\7q\2\2QR\7t\2\2RS\7v\2\2S\4\3\2\2\2TU\7=\2\2U\6")
+ buf.write("\3\2\2\2VW\7o\2\2WX\7q\2\2XY\7f\2\2YZ\7w\2\2Z[\7n\2\2")
+ buf.write("[\\\7g\2\2\\\b\3\2\2\2]^\7k\2\2^_\7p\2\2_`\7v\2\2`a\7")
+ buf.write("g\2\2ab\7t\2\2bc\7h\2\2cd\7c\2\2de\7e\2\2ef\7g\2\2f\n")
+ buf.write("\3\2\2\2gh\7g\2\2hi\7z\2\2ij\7v\2\2jk\7g\2\2kl\7p\2\2")
+ buf.write("lm\7f\2\2mn\7u\2\2n\f\3\2\2\2op\7}\2\2p\16\3\2\2\2qr\7")
+ buf.write("\177\2\2r\20\3\2\2\2st\7x\2\2tu\7q\2\2uv\7k\2\2vw\7f\2")
+ buf.write("\2w\22\3\2\2\2xy\7*\2\2y\24\3\2\2\2z{\7+\2\2{\26\3\2\2")
+ buf.write("\2|}\7e\2\2}~\7q\2\2~\177\7p\2\2\177\u0080\7u\2\2\u0080")
+ buf.write("\u0081\7v\2\2\u0081\30\3\2\2\2\u0082\u0083\7u\2\2\u0083")
+ buf.write("\u0084\7k\2\2\u0084\u0085\7i\2\2\u0085\u0086\7p\2\2\u0086")
+ buf.write("\u0087\7c\2\2\u0087\u0088\7n\2\2\u0088\32\3\2\2\2\u0089")
+ buf.write("\u008a\7t\2\2\u008a\u008b\7g\2\2\u008b\u008c\7c\2\2\u008c")
+ buf.write("\u008d\7f\2\2\u008d\u008e\7q\2\2\u008e\u008f\7p\2\2\u008f")
+ buf.write("\u0090\7n\2\2\u0090\u0091\7{\2\2\u0091\34\3\2\2\2\u0092")
+ buf.write("\u0093\7.\2\2\u0093\36\3\2\2\2\u0094\u0095\7?\2\2\u0095")
+ buf.write(" \3\2\2\2\u0096\u0097\7d\2\2\u0097\u0098\7q\2\2\u0098")
+ buf.write("\u0099\7q\2\2\u0099\u009a\7n\2\2\u009a\"\3\2\2\2\u009b")
+ buf.write("\u009c\7k\2\2\u009c\u009d\7p\2\2\u009d\u009e\7v\2\2\u009e")
+ buf.write("$\3\2\2\2\u009f\u00a0\7t\2\2\u00a0\u00a1\7g\2\2\u00a1")
+ buf.write("\u00a2\7c\2\2\u00a2\u00a3\7n\2\2\u00a3&\3\2\2\2\u00a4")
+ buf.write("\u00a5\7u\2\2\u00a5\u00a6\7v\2\2\u00a6\u00a7\7t\2\2\u00a7")
+ buf.write("\u00a8\7k\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7i\2\2\u00aa")
+ buf.write("(\3\2\2\2\u00ab\u00ac\7x\2\2\u00ac\u00ad\7c\2\2\u00ad")
+ buf.write("\u00ae\7t\2\2\u00ae*\3\2\2\2\u00af\u00b0\7n\2\2\u00b0")
+ buf.write("\u00b1\7k\2\2\u00b1\u00b2\7u\2\2\u00b2\u00b3\7v\2\2\u00b3")
+ buf.write(",\3\2\2\2\u00b4\u00b5\7>\2\2\u00b5.\3\2\2\2\u00b6\u00b7")
+ buf.write("\7@\2\2\u00b7\60\3\2\2\2\u00b8\u00b9\7o\2\2\u00b9\u00ba")
buf.write("\7q\2\2\u00ba\u00bb\7f\2\2\u00bb\u00bc\7g\2\2\u00bc\u00bd")
buf.write("\7n\2\2\u00bd\62\3\2\2\2\u00be\u00bf\7u\2\2\u00bf\u00c0")
buf.write("\7v\2\2\u00c0\u00c1\7t\2\2\u00c1\u00c2\7w\2\2\u00c2\u00c3")
@@ -179,7 +179,7 @@ class TLexer(Lexer):
literalNames = [ "<INVALID>",
"'import'", "';'", "'module'", "'interface'", "'extends'", "'{'",
- "'}'", "'void'", "'('", "')'", "'signal'", "'readonly'", "'const'",
+ "'}'", "'void'", "'('", "')'", "'const'", "'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 671abfa..5f94603 100644
--- a/qface/idl/parser/TLexer.tokens
+++ b/qface/idl/parser/TLexer.tokens
@@ -45,9 +45,9 @@ MULTICOMM=37
'void'=8
'('=9
')'=10
-'signal'=11
-'readonly'=12
-'const'=13
+'const'=11
+'signal'=12
+'readonly'=13
','=14
'='=15
'bool'=16
diff --git a/qface/idl/parser/TListener.py b/qface/idl/parser/TListener.py
index 2899519..e908b46 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#operationModifierSymbol.
+ def enterOperationModifierSymbol(self, ctx:TParser.OperationModifierSymbolContext):
+ pass
+
+ # Exit a parse tree produced by TParser#operationModifierSymbol.
+ def exitOperationModifierSymbol(self, ctx:TParser.OperationModifierSymbolContext):
+ pass
+
+
# Enter a parse tree produced by TParser#signalSymbol.
def enterSignalSymbol(self, ctx:TParser.SignalSymbolContext):
pass
diff --git a/qface/idl/parser/TParser.py b/qface/idl/parser/TParser.py
index aa476e4..835f86c 100644
--- a/qface/idl/parser/TParser.py
+++ b/qface/idl/parser/TParser.py
@@ -6,151 +6,155 @@ from io import StringIO
def serializedATN():
with StringIO() as buf:
buf.write("\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\'")
- buf.write("\u013b\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("\u0142\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\4\31")
- buf.write("\t\31\4\32\t\32\3\2\3\2\7\2\67\n\2\f\2\16\2:\13\2\3\3")
- buf.write("\3\3\7\3>\n\3\f\3\16\3A\13\3\3\4\3\4\3\4\3\4\5\4G\n\4")
- buf.write("\3\5\5\5J\n\5\3\5\7\5M\n\5\f\5\16\5P\13\5\3\5\3\5\3\5")
- buf.write("\3\5\5\5V\n\5\3\6\3\6\3\6\5\6[\n\6\3\7\5\7^\n\7\3\7\7")
- buf.write("\7a\n\7\f\7\16\7d\13\7\3\7\3\7\3\7\3\7\5\7j\n\7\3\7\3")
- buf.write("\7\7\7n\n\7\f\7\16\7q\13\7\3\7\3\7\5\7u\n\7\3\b\3\b\3")
- buf.write("\b\5\bz\n\b\3\t\5\t}\n\t\3\t\7\t\u0080\n\t\f\t\16\t\u0083")
- buf.write("\13\t\3\t\3\t\5\t\u0087\n\t\3\t\3\t\3\t\7\t\u008c\n\t")
- buf.write("\f\t\16\t\u008f\13\t\3\t\3\t\5\t\u0093\n\t\3\n\5\n\u0096")
- buf.write("\n\n\3\n\7\n\u0099\n\n\f\n\16\n\u009c\13\n\3\n\3\n\3\n")
- buf.write("\3\n\7\n\u00a2\n\n\f\n\16\n\u00a5\13\n\3\n\3\n\5\n\u00a9")
- buf.write("\n\n\3\13\5\13\u00ac\n\13\3\13\7\13\u00af\n\13\f\13\16")
- buf.write("\13\u00b2\13\13\3\13\5\13\u00b5\n\13\3\13\3\13\3\13\5")
- buf.write("\13\u00ba\n\13\3\f\3\f\5\f\u00be\n\f\3\r\3\r\3\r\5\r\u00c3")
- buf.write("\n\r\3\16\3\16\3\17\3\17\3\17\5\17\u00ca\n\17\3\17\5\17")
- buf.write("\u00cd\n\17\3\20\3\20\3\20\3\20\5\20\u00d3\n\20\3\21\3")
- buf.write("\21\3\22\3\22\3\22\3\22\3\22\5\22\u00dc\n\22\3\23\3\23")
- buf.write("\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\5\25\u00e9")
- buf.write("\n\25\3\25\7\25\u00ec\n\25\f\25\16\25\u00ef\13\25\3\25")
- buf.write("\3\25\3\25\3\25\7\25\u00f5\n\25\f\25\16\25\u00f8\13\25")
- buf.write("\3\25\3\25\5\25\u00fc\n\25\3\26\5\26\u00ff\n\26\3\26\7")
- buf.write("\26\u0102\n\26\f\26\16\26\u0105\13\26\3\26\3\26\3\26\5")
- buf.write("\26\u010a\n\26\3\27\5\27\u010d\n\27\3\27\7\27\u0110\n")
- buf.write("\27\f\27\16\27\u0113\13\27\3\27\3\27\3\27\3\27\7\27\u0119")
- buf.write("\n\27\f\27\16\27\u011c\13\27\3\27\3\27\5\27\u0120\n\27")
- buf.write("\3\30\3\30\5\30\u0124\n\30\3\31\5\31\u0127\n\31\3\31\7")
- buf.write("\31\u012a\n\31\f\31\16\31\u012d\13\31\3\31\3\31\3\31\5")
- buf.write("\31\u0132\n\31\3\31\5\31\u0135\n\31\3\32\3\32\5\32\u0139")
- buf.write("\n\32\3\32\2\2\33\2\4\6\b\n\f\16\20\22\24\26\30\32\34")
- buf.write("\36 \"$&(*,.\60\62\2\2\u0159\2\64\3\2\2\2\4;\3\2\2\2\6")
- buf.write("B\3\2\2\2\bI\3\2\2\2\nZ\3\2\2\2\f]\3\2\2\2\16y\3\2\2\2")
- buf.write("\20|\3\2\2\2\22\u0095\3\2\2\2\24\u00ab\3\2\2\2\26\u00bd")
- buf.write("\3\2\2\2\30\u00bf\3\2\2\2\32\u00c4\3\2\2\2\34\u00c6\3")
- buf.write("\2\2\2\36\u00d2\3\2\2\2 \u00d4\3\2\2\2\"\u00db\3\2\2\2")
- buf.write("$\u00dd\3\2\2\2&\u00e2\3\2\2\2(\u00e8\3\2\2\2*\u00fe\3")
- buf.write("\2\2\2,\u010c\3\2\2\2.\u0123\3\2\2\2\60\u0126\3\2\2\2")
- buf.write("\62\u0138\3\2\2\2\648\5\4\3\2\65\67\5\n\6\2\66\65\3\2")
- buf.write("\2\2\67:\3\2\2\28\66\3\2\2\289\3\2\2\29\3\3\2\2\2:8\3")
- buf.write("\2\2\2;?\5\b\5\2<>\5\6\4\2=<\3\2\2\2>A\3\2\2\2?=\3\2\2")
- buf.write("\2?@\3\2\2\2@\5\3\2\2\2A?\3\2\2\2BC\7\3\2\2CD\7\"\2\2")
- buf.write("DF\7#\2\2EG\7\4\2\2FE\3\2\2\2FG\3\2\2\2G\7\3\2\2\2HJ\7")
- buf.write("$\2\2IH\3\2\2\2IJ\3\2\2\2JN\3\2\2\2KM\5\32\16\2LK\3\2")
- buf.write("\2\2MP\3\2\2\2NL\3\2\2\2NO\3\2\2\2OQ\3\2\2\2PN\3\2\2\2")
- buf.write("QR\7\5\2\2RS\7\"\2\2SU\7#\2\2TV\7\4\2\2UT\3\2\2\2UV\3")
- buf.write("\2\2\2V\t\3\2\2\2W[\5\f\7\2X[\5(\25\2Y[\5,\27\2ZW\3\2")
- buf.write("\2\2ZX\3\2\2\2ZY\3\2\2\2[\13\3\2\2\2\\^\7$\2\2]\\\3\2")
- buf.write("\2\2]^\3\2\2\2^b\3\2\2\2_a\5\32\16\2`_\3\2\2\2ad\3\2\2")
- buf.write("\2b`\3\2\2\2bc\3\2\2\2ce\3\2\2\2db\3\2\2\2ef\7\6\2\2f")
- buf.write("i\7\"\2\2gh\7\7\2\2hj\7\"\2\2ig\3\2\2\2ij\3\2\2\2jk\3")
- buf.write("\2\2\2ko\7\b\2\2ln\5\16\b\2ml\3\2\2\2nq\3\2\2\2om\3\2")
- buf.write("\2\2op\3\2\2\2pr\3\2\2\2qo\3\2\2\2rt\7\t\2\2su\7\4\2\2")
- buf.write("ts\3\2\2\2tu\3\2\2\2u\r\3\2\2\2vz\5\20\t\2wz\5\24\13\2")
- buf.write("xz\5\22\n\2yv\3\2\2\2yw\3\2\2\2yx\3\2\2\2z\17\3\2\2\2")
- buf.write("{}\7$\2\2|{\3\2\2\2|}\3\2\2\2}\u0081\3\2\2\2~\u0080\5")
- buf.write("\32\16\2\177~\3\2\2\2\u0080\u0083\3\2\2\2\u0081\177\3")
- buf.write("\2\2\2\u0081\u0082\3\2\2\2\u0082\u0086\3\2\2\2\u0083\u0081")
- buf.write("\3\2\2\2\u0084\u0087\5\36\20\2\u0085\u0087\7\n\2\2\u0086")
- buf.write("\u0084\3\2\2\2\u0086\u0085\3\2\2\2\u0087\u0088\3\2\2\2")
- buf.write("\u0088\u0089\7\"\2\2\u0089\u008d\7\13\2\2\u008a\u008c")
- buf.write("\5\30\r\2\u008b\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d")
- buf.write("\u008b\3\2\2\2\u008d\u008e\3\2\2\2\u008e\u0090\3\2\2\2")
- buf.write("\u008f\u008d\3\2\2\2\u0090\u0092\7\f\2\2\u0091\u0093\7")
- buf.write("\4\2\2\u0092\u0091\3\2\2\2\u0092\u0093\3\2\2\2\u0093\21")
- buf.write("\3\2\2\2\u0094\u0096\7$\2\2\u0095\u0094\3\2\2\2\u0095")
- buf.write("\u0096\3\2\2\2\u0096\u009a\3\2\2\2\u0097\u0099\5\32\16")
- buf.write("\2\u0098\u0097\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098")
- buf.write("\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009d\3\2\2\2\u009c")
- buf.write("\u009a\3\2\2\2\u009d\u009e\7\r\2\2\u009e\u009f\7\"\2\2")
- buf.write("\u009f\u00a3\7\13\2\2\u00a0\u00a2\5\30\r\2\u00a1\u00a0")
- buf.write("\3\2\2\2\u00a2\u00a5\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a3")
- buf.write("\u00a4\3\2\2\2\u00a4\u00a6\3\2\2\2\u00a5\u00a3\3\2\2\2")
- buf.write("\u00a6\u00a8\7\f\2\2\u00a7\u00a9\7\4\2\2\u00a8\u00a7\3")
- buf.write("\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\23\3\2\2\2\u00aa\u00ac")
- buf.write("\7$\2\2\u00ab\u00aa\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac")
- buf.write("\u00b0\3\2\2\2\u00ad\u00af\5\32\16\2\u00ae\u00ad\3\2\2")
- buf.write("\2\u00af\u00b2\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b0\u00b1")
- buf.write("\3\2\2\2\u00b1\u00b4\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b3")
- buf.write("\u00b5\5\26\f\2\u00b4\u00b3\3\2\2\2\u00b4\u00b5\3\2\2")
- buf.write("\2\u00b5\u00b6\3\2\2\2\u00b6\u00b7\5\36\20\2\u00b7\u00b9")
- buf.write("\7\"\2\2\u00b8\u00ba\7\4\2\2\u00b9\u00b8\3\2\2\2\u00b9")
- buf.write("\u00ba\3\2\2\2\u00ba\25\3\2\2\2\u00bb\u00be\7\16\2\2\u00bc")
- buf.write("\u00be\7\17\2\2\u00bd\u00bb\3\2\2\2\u00bd\u00bc\3\2\2")
- buf.write("\2\u00be\27\3\2\2\2\u00bf\u00c0\5\36\20\2\u00c0\u00c2")
- buf.write("\7\"\2\2\u00c1\u00c3\7\20\2\2\u00c2\u00c1\3\2\2\2\u00c2")
- buf.write("\u00c3\3\2\2\2\u00c3\31\3\2\2\2\u00c4\u00c5\7\36\2\2\u00c5")
- buf.write("\33\3\2\2\2\u00c6\u00c9\7\"\2\2\u00c7\u00c8\7\21\2\2\u00c8")
- buf.write("\u00ca\7\"\2\2\u00c9\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2")
- buf.write("\u00ca\u00cc\3\2\2\2\u00cb\u00cd\7\20\2\2\u00cc\u00cb")
- buf.write("\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\35\3\2\2\2\u00ce\u00d3")
- buf.write("\5\"\22\2\u00cf\u00d3\5 \21\2\u00d0\u00d3\5$\23\2\u00d1")
- buf.write("\u00d3\5&\24\2\u00d2\u00ce\3\2\2\2\u00d2\u00cf\3\2\2\2")
- buf.write("\u00d2\u00d0\3\2\2\2\u00d2\u00d1\3\2\2\2\u00d3\37\3\2")
- buf.write("\2\2\u00d4\u00d5\7\"\2\2\u00d5!\3\2\2\2\u00d6\u00dc\7")
- buf.write("\22\2\2\u00d7\u00dc\7\23\2\2\u00d8\u00dc\7\24\2\2\u00d9")
- buf.write("\u00dc\7\25\2\2\u00da\u00dc\7\26\2\2\u00db\u00d6\3\2\2")
- buf.write("\2\u00db\u00d7\3\2\2\2\u00db\u00d8\3\2\2\2\u00db\u00d9")
- buf.write("\3\2\2\2\u00db\u00da\3\2\2\2\u00dc#\3\2\2\2\u00dd\u00de")
- buf.write("\7\27\2\2\u00de\u00df\7\30\2\2\u00df\u00e0\5\36\20\2\u00e0")
- buf.write("\u00e1\7\31\2\2\u00e1%\3\2\2\2\u00e2\u00e3\7\32\2\2\u00e3")
- buf.write("\u00e4\7\30\2\2\u00e4\u00e5\5\36\20\2\u00e5\u00e6\7\31")
- buf.write("\2\2\u00e6\'\3\2\2\2\u00e7\u00e9\7$\2\2\u00e8\u00e7\3")
- buf.write("\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\u00ed\3\2\2\2\u00ea\u00ec")
- buf.write("\5\32\16\2\u00eb\u00ea\3\2\2\2\u00ec\u00ef\3\2\2\2\u00ed")
- buf.write("\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f0\3\2\2\2")
- buf.write("\u00ef\u00ed\3\2\2\2\u00f0\u00f1\7\33\2\2\u00f1\u00f2")
- buf.write("\7\"\2\2\u00f2\u00f6\7\b\2\2\u00f3\u00f5\5*\26\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\u00fb\7\t\2\2\u00fa\u00fc\7\4\2\2\u00fb\u00fa")
- buf.write("\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc)\3\2\2\2\u00fd\u00ff")
- buf.write("\7$\2\2\u00fe\u00fd\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff")
- buf.write("\u0103\3\2\2\2\u0100\u0102\5\32\16\2\u0101\u0100\3\2\2")
- buf.write("\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0103\u0104")
- buf.write("\3\2\2\2\u0104\u0106\3\2\2\2\u0105\u0103\3\2\2\2\u0106")
- buf.write("\u0107\5\36\20\2\u0107\u0109\7\"\2\2\u0108\u010a\7\4\2")
- buf.write("\2\u0109\u0108\3\2\2\2\u0109\u010a\3\2\2\2\u010a+\3\2")
- buf.write("\2\2\u010b\u010d\7$\2\2\u010c\u010b\3\2\2\2\u010c\u010d")
- buf.write("\3\2\2\2\u010d\u0111\3\2\2\2\u010e\u0110\5\32\16\2\u010f")
- buf.write("\u010e\3\2\2\2\u0110\u0113\3\2\2\2\u0111\u010f\3\2\2\2")
- buf.write("\u0111\u0112\3\2\2\2\u0112\u0114\3\2\2\2\u0113\u0111\3")
- buf.write("\2\2\2\u0114\u0115\5.\30\2\u0115\u0116\7\"\2\2\u0116\u011a")
- buf.write("\7\b\2\2\u0117\u0119\5\60\31\2\u0118\u0117\3\2\2\2\u0119")
- buf.write("\u011c\3\2\2\2\u011a\u0118\3\2\2\2\u011a\u011b\3\2\2\2")
- buf.write("\u011b\u011d\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u011f\7")
- buf.write("\t\2\2\u011e\u0120\7\4\2\2\u011f\u011e\3\2\2\2\u011f\u0120")
- buf.write("\3\2\2\2\u0120-\3\2\2\2\u0121\u0124\7\34\2\2\u0122\u0124")
- buf.write("\7\35\2\2\u0123\u0121\3\2\2\2\u0123\u0122\3\2\2\2\u0124")
- buf.write("/\3\2\2\2\u0125\u0127\7$\2\2\u0126\u0125\3\2\2\2\u0126")
- buf.write("\u0127\3\2\2\2\u0127\u012b\3\2\2\2\u0128\u012a\5\32\16")
- buf.write("\2\u0129\u0128\3\2\2\2\u012a\u012d\3\2\2\2\u012b\u0129")
- buf.write("\3\2\2\2\u012b\u012c\3\2\2\2\u012c\u012e\3\2\2\2\u012d")
- buf.write("\u012b\3\2\2\2\u012e\u0131\7\"\2\2\u012f\u0130\7\21\2")
- buf.write("\2\u0130\u0132\5\62\32\2\u0131\u012f\3\2\2\2\u0131\u0132")
- buf.write("\3\2\2\2\u0132\u0134\3\2\2\2\u0133\u0135\7\20\2\2\u0134")
- buf.write("\u0133\3\2\2\2\u0134\u0135\3\2\2\2\u0135\61\3\2\2\2\u0136")
- buf.write("\u0139\7\37\2\2\u0137\u0139\7 \2\2\u0138\u0136\3\2\2\2")
- buf.write("\u0138\u0137\3\2\2\2\u0139\63\3\2\2\2\638?FINUZ]bioty")
- buf.write("|\u0081\u0086\u008d\u0092\u0095\u009a\u00a3\u00a8\u00ab")
- buf.write("\u00b0\u00b4\u00b9\u00bd\u00c2\u00c9\u00cc\u00d2\u00db")
- buf.write("\u00e8\u00ed\u00f6\u00fb\u00fe\u0103\u0109\u010c\u0111")
- buf.write("\u011a\u011f\u0123\u0126\u012b\u0131\u0134\u0138")
+ buf.write("\t\31\4\32\t\32\4\33\t\33\3\2\3\2\7\29\n\2\f\2\16\2<\13")
+ buf.write("\2\3\3\3\3\7\3@\n\3\f\3\16\3C\13\3\3\4\3\4\3\4\3\4\5\4")
+ buf.write("I\n\4\3\5\5\5L\n\5\3\5\7\5O\n\5\f\5\16\5R\13\5\3\5\3\5")
+ buf.write("\3\5\3\5\5\5X\n\5\3\6\3\6\3\6\5\6]\n\6\3\7\5\7`\n\7\3")
+ buf.write("\7\7\7c\n\7\f\7\16\7f\13\7\3\7\3\7\3\7\3\7\5\7l\n\7\3")
+ buf.write("\7\3\7\7\7p\n\7\f\7\16\7s\13\7\3\7\3\7\5\7w\n\7\3\b\3")
+ buf.write("\b\3\b\5\b|\n\b\3\t\5\t\177\n\t\3\t\7\t\u0082\n\t\f\t")
+ buf.write("\16\t\u0085\13\t\3\t\3\t\5\t\u0089\n\t\3\t\3\t\3\t\7\t")
+ buf.write("\u008e\n\t\f\t\16\t\u0091\13\t\3\t\3\t\5\t\u0095\n\t\3")
+ buf.write("\t\5\t\u0098\n\t\3\n\3\n\3\13\5\13\u009d\n\13\3\13\7\13")
+ buf.write("\u00a0\n\13\f\13\16\13\u00a3\13\13\3\13\3\13\3\13\3\13")
+ buf.write("\7\13\u00a9\n\13\f\13\16\13\u00ac\13\13\3\13\3\13\5\13")
+ buf.write("\u00b0\n\13\3\f\5\f\u00b3\n\f\3\f\7\f\u00b6\n\f\f\f\16")
+ buf.write("\f\u00b9\13\f\3\f\5\f\u00bc\n\f\3\f\3\f\3\f\5\f\u00c1")
+ buf.write("\n\f\3\r\3\r\5\r\u00c5\n\r\3\16\3\16\3\16\5\16\u00ca\n")
+ buf.write("\16\3\17\3\17\3\20\3\20\3\20\5\20\u00d1\n\20\3\20\5\20")
+ buf.write("\u00d4\n\20\3\21\3\21\3\21\3\21\5\21\u00da\n\21\3\22\3")
+ buf.write("\22\3\23\3\23\3\23\3\23\3\23\5\23\u00e3\n\23\3\24\3\24")
+ buf.write("\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\26\5\26\u00f0")
+ buf.write("\n\26\3\26\7\26\u00f3\n\26\f\26\16\26\u00f6\13\26\3\26")
+ buf.write("\3\26\3\26\3\26\7\26\u00fc\n\26\f\26\16\26\u00ff\13\26")
+ buf.write("\3\26\3\26\5\26\u0103\n\26\3\27\5\27\u0106\n\27\3\27\7")
+ buf.write("\27\u0109\n\27\f\27\16\27\u010c\13\27\3\27\3\27\3\27\5")
+ buf.write("\27\u0111\n\27\3\30\5\30\u0114\n\30\3\30\7\30\u0117\n")
+ buf.write("\30\f\30\16\30\u011a\13\30\3\30\3\30\3\30\3\30\7\30\u0120")
+ buf.write("\n\30\f\30\16\30\u0123\13\30\3\30\3\30\5\30\u0127\n\30")
+ buf.write("\3\31\3\31\5\31\u012b\n\31\3\32\5\32\u012e\n\32\3\32\7")
+ buf.write("\32\u0131\n\32\f\32\16\32\u0134\13\32\3\32\3\32\3\32\5")
+ buf.write("\32\u0139\n\32\3\32\5\32\u013c\n\32\3\33\3\33\5\33\u0140")
+ buf.write("\n\33\3\33\2\2\34\2\4\6\b\n\f\16\20\22\24\26\30\32\34")
+ buf.write("\36 \"$&(*,.\60\62\64\2\2\u0160\2\66\3\2\2\2\4=\3\2\2")
+ buf.write("\2\6D\3\2\2\2\bK\3\2\2\2\n\\\3\2\2\2\f_\3\2\2\2\16{\3")
+ buf.write("\2\2\2\20~\3\2\2\2\22\u0099\3\2\2\2\24\u009c\3\2\2\2\26")
+ buf.write("\u00b2\3\2\2\2\30\u00c4\3\2\2\2\32\u00c6\3\2\2\2\34\u00cb")
+ buf.write("\3\2\2\2\36\u00cd\3\2\2\2 \u00d9\3\2\2\2\"\u00db\3\2\2")
+ buf.write("\2$\u00e2\3\2\2\2&\u00e4\3\2\2\2(\u00e9\3\2\2\2*\u00ef")
+ buf.write("\3\2\2\2,\u0105\3\2\2\2.\u0113\3\2\2\2\60\u012a\3\2\2")
+ buf.write("\2\62\u012d\3\2\2\2\64\u013f\3\2\2\2\66:\5\4\3\2\679\5")
+ buf.write("\n\6\28\67\3\2\2\29<\3\2\2\2:8\3\2\2\2:;\3\2\2\2;\3\3")
+ buf.write("\2\2\2<:\3\2\2\2=A\5\b\5\2>@\5\6\4\2?>\3\2\2\2@C\3\2\2")
+ buf.write("\2A?\3\2\2\2AB\3\2\2\2B\5\3\2\2\2CA\3\2\2\2DE\7\3\2\2")
+ buf.write("EF\7\"\2\2FH\7#\2\2GI\7\4\2\2HG\3\2\2\2HI\3\2\2\2I\7\3")
+ buf.write("\2\2\2JL\7$\2\2KJ\3\2\2\2KL\3\2\2\2LP\3\2\2\2MO\5\34\17")
+ buf.write("\2NM\3\2\2\2OR\3\2\2\2PN\3\2\2\2PQ\3\2\2\2QS\3\2\2\2R")
+ buf.write("P\3\2\2\2ST\7\5\2\2TU\7\"\2\2UW\7#\2\2VX\7\4\2\2WV\3\2")
+ buf.write("\2\2WX\3\2\2\2X\t\3\2\2\2Y]\5\f\7\2Z]\5*\26\2[]\5.\30")
+ buf.write("\2\\Y\3\2\2\2\\Z\3\2\2\2\\[\3\2\2\2]\13\3\2\2\2^`\7$\2")
+ buf.write("\2_^\3\2\2\2_`\3\2\2\2`d\3\2\2\2ac\5\34\17\2ba\3\2\2\2")
+ buf.write("cf\3\2\2\2db\3\2\2\2de\3\2\2\2eg\3\2\2\2fd\3\2\2\2gh\7")
+ buf.write("\6\2\2hk\7\"\2\2ij\7\7\2\2jl\7\"\2\2ki\3\2\2\2kl\3\2\2")
+ buf.write("\2lm\3\2\2\2mq\7\b\2\2np\5\16\b\2on\3\2\2\2ps\3\2\2\2")
+ buf.write("qo\3\2\2\2qr\3\2\2\2rt\3\2\2\2sq\3\2\2\2tv\7\t\2\2uw\7")
+ buf.write("\4\2\2vu\3\2\2\2vw\3\2\2\2w\r\3\2\2\2x|\5\20\t\2y|\5\26")
+ buf.write("\f\2z|\5\24\13\2{x\3\2\2\2{y\3\2\2\2{z\3\2\2\2|\17\3\2")
+ buf.write("\2\2}\177\7$\2\2~}\3\2\2\2~\177\3\2\2\2\177\u0083\3\2")
+ buf.write("\2\2\u0080\u0082\5\34\17\2\u0081\u0080\3\2\2\2\u0082\u0085")
+ buf.write("\3\2\2\2\u0083\u0081\3\2\2\2\u0083\u0084\3\2\2\2\u0084")
+ buf.write("\u0088\3\2\2\2\u0085\u0083\3\2\2\2\u0086\u0089\5 \21\2")
+ buf.write("\u0087\u0089\7\n\2\2\u0088\u0086\3\2\2\2\u0088\u0087\3")
+ buf.write("\2\2\2\u0089\u008a\3\2\2\2\u008a\u008b\7\"\2\2\u008b\u008f")
+ buf.write("\7\13\2\2\u008c\u008e\5\32\16\2\u008d\u008c\3\2\2\2\u008e")
+ buf.write("\u0091\3\2\2\2\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2")
+ buf.write("\u0090\u0092\3\2\2\2\u0091\u008f\3\2\2\2\u0092\u0094\7")
+ buf.write("\f\2\2\u0093\u0095\5\22\n\2\u0094\u0093\3\2\2\2\u0094")
+ buf.write("\u0095\3\2\2\2\u0095\u0097\3\2\2\2\u0096\u0098\7\4\2\2")
+ buf.write("\u0097\u0096\3\2\2\2\u0097\u0098\3\2\2\2\u0098\21\3\2")
+ buf.write("\2\2\u0099\u009a\7\r\2\2\u009a\23\3\2\2\2\u009b\u009d")
+ buf.write("\7$\2\2\u009c\u009b\3\2\2\2\u009c\u009d\3\2\2\2\u009d")
+ buf.write("\u00a1\3\2\2\2\u009e\u00a0\5\34\17\2\u009f\u009e\3\2\2")
+ buf.write("\2\u00a0\u00a3\3\2\2\2\u00a1\u009f\3\2\2\2\u00a1\u00a2")
+ buf.write("\3\2\2\2\u00a2\u00a4\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a4")
+ buf.write("\u00a5\7\16\2\2\u00a5\u00a6\7\"\2\2\u00a6\u00aa\7\13\2")
+ buf.write("\2\u00a7\u00a9\5\32\16\2\u00a8\u00a7\3\2\2\2\u00a9\u00ac")
+ buf.write("\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab")
+ buf.write("\u00ad\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ad\u00af\7\f\2\2")
+ buf.write("\u00ae\u00b0\7\4\2\2\u00af\u00ae\3\2\2\2\u00af\u00b0\3")
+ buf.write("\2\2\2\u00b0\25\3\2\2\2\u00b1\u00b3\7$\2\2\u00b2\u00b1")
+ buf.write("\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00b7\3\2\2\2\u00b4")
+ buf.write("\u00b6\5\34\17\2\u00b5\u00b4\3\2\2\2\u00b6\u00b9\3\2\2")
+ buf.write("\2\u00b7\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00bb")
+ buf.write("\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00bc\5\30\r\2\u00bb")
+ buf.write("\u00ba\3\2\2\2\u00bb\u00bc\3\2\2\2\u00bc\u00bd\3\2\2\2")
+ buf.write("\u00bd\u00be\5 \21\2\u00be\u00c0\7\"\2\2\u00bf\u00c1\7")
+ buf.write("\4\2\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\27")
+ buf.write("\3\2\2\2\u00c2\u00c5\7\17\2\2\u00c3\u00c5\7\r\2\2\u00c4")
+ buf.write("\u00c2\3\2\2\2\u00c4\u00c3\3\2\2\2\u00c5\31\3\2\2\2\u00c6")
+ buf.write("\u00c7\5 \21\2\u00c7\u00c9\7\"\2\2\u00c8\u00ca\7\20\2")
+ buf.write("\2\u00c9\u00c8\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\33\3")
+ buf.write("\2\2\2\u00cb\u00cc\7\36\2\2\u00cc\35\3\2\2\2\u00cd\u00d0")
+ buf.write("\7\"\2\2\u00ce\u00cf\7\21\2\2\u00cf\u00d1\7\"\2\2\u00d0")
+ buf.write("\u00ce\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1\u00d3\3\2\2\2")
+ buf.write("\u00d2\u00d4\7\20\2\2\u00d3\u00d2\3\2\2\2\u00d3\u00d4")
+ buf.write("\3\2\2\2\u00d4\37\3\2\2\2\u00d5\u00da\5$\23\2\u00d6\u00da")
+ buf.write("\5\"\22\2\u00d7\u00da\5&\24\2\u00d8\u00da\5(\25\2\u00d9")
+ buf.write("\u00d5\3\2\2\2\u00d9\u00d6\3\2\2\2\u00d9\u00d7\3\2\2\2")
+ buf.write("\u00d9\u00d8\3\2\2\2\u00da!\3\2\2\2\u00db\u00dc\7\"\2")
+ buf.write("\2\u00dc#\3\2\2\2\u00dd\u00e3\7\22\2\2\u00de\u00e3\7\23")
+ buf.write("\2\2\u00df\u00e3\7\24\2\2\u00e0\u00e3\7\25\2\2\u00e1\u00e3")
+ buf.write("\7\26\2\2\u00e2\u00dd\3\2\2\2\u00e2\u00de\3\2\2\2\u00e2")
+ buf.write("\u00df\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e2\u00e1\3\2\2\2")
+ buf.write("\u00e3%\3\2\2\2\u00e4\u00e5\7\27\2\2\u00e5\u00e6\7\30")
+ buf.write("\2\2\u00e6\u00e7\5 \21\2\u00e7\u00e8\7\31\2\2\u00e8\'")
+ buf.write("\3\2\2\2\u00e9\u00ea\7\32\2\2\u00ea\u00eb\7\30\2\2\u00eb")
+ buf.write("\u00ec\5 \21\2\u00ec\u00ed\7\31\2\2\u00ed)\3\2\2\2\u00ee")
+ buf.write("\u00f0\7$\2\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2")
+ buf.write("\u00f0\u00f4\3\2\2\2\u00f1\u00f3\5\34\17\2\u00f2\u00f1")
+ buf.write("\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4\u00f2\3\2\2\2\u00f4")
+ buf.write("\u00f5\3\2\2\2\u00f5\u00f7\3\2\2\2\u00f6\u00f4\3\2\2\2")
+ buf.write("\u00f7\u00f8\7\33\2\2\u00f8\u00f9\7\"\2\2\u00f9\u00fd")
+ buf.write("\7\b\2\2\u00fa\u00fc\5,\27\2\u00fb\u00fa\3\2\2\2\u00fc")
+ buf.write("\u00ff\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2")
+ buf.write("\u00fe\u0100\3\2\2\2\u00ff\u00fd\3\2\2\2\u0100\u0102\7")
+ buf.write("\t\2\2\u0101\u0103\7\4\2\2\u0102\u0101\3\2\2\2\u0102\u0103")
+ buf.write("\3\2\2\2\u0103+\3\2\2\2\u0104\u0106\7$\2\2\u0105\u0104")
+ buf.write("\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u010a\3\2\2\2\u0107")
+ buf.write("\u0109\5\34\17\2\u0108\u0107\3\2\2\2\u0109\u010c\3\2\2")
+ buf.write("\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2\u010b\u010d")
+ buf.write("\3\2\2\2\u010c\u010a\3\2\2\2\u010d\u010e\5 \21\2\u010e")
+ buf.write("\u0110\7\"\2\2\u010f\u0111\7\4\2\2\u0110\u010f\3\2\2\2")
+ buf.write("\u0110\u0111\3\2\2\2\u0111-\3\2\2\2\u0112\u0114\7$\2\2")
+ buf.write("\u0113\u0112\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0118\3")
+ buf.write("\2\2\2\u0115\u0117\5\34\17\2\u0116\u0115\3\2\2\2\u0117")
+ buf.write("\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119\3\2\2\2")
+ buf.write("\u0119\u011b\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011c\5")
+ buf.write("\60\31\2\u011c\u011d\7\"\2\2\u011d\u0121\7\b\2\2\u011e")
+ buf.write("\u0120\5\62\32\2\u011f\u011e\3\2\2\2\u0120\u0123\3\2\2")
+ buf.write("\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0124")
+ buf.write("\3\2\2\2\u0123\u0121\3\2\2\2\u0124\u0126\7\t\2\2\u0125")
+ buf.write("\u0127\7\4\2\2\u0126\u0125\3\2\2\2\u0126\u0127\3\2\2\2")
+ buf.write("\u0127/\3\2\2\2\u0128\u012b\7\34\2\2\u0129\u012b\7\35")
+ buf.write("\2\2\u012a\u0128\3\2\2\2\u012a\u0129\3\2\2\2\u012b\61")
+ buf.write("\3\2\2\2\u012c\u012e\7$\2\2\u012d\u012c\3\2\2\2\u012d")
+ buf.write("\u012e\3\2\2\2\u012e\u0132\3\2\2\2\u012f\u0131\5\34\17")
+ buf.write("\2\u0130\u012f\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130")
+ buf.write("\3\2\2\2\u0132\u0133\3\2\2\2\u0133\u0135\3\2\2\2\u0134")
+ buf.write("\u0132\3\2\2\2\u0135\u0138\7\"\2\2\u0136\u0137\7\21\2")
+ buf.write("\2\u0137\u0139\5\64\33\2\u0138\u0136\3\2\2\2\u0138\u0139")
+ buf.write("\3\2\2\2\u0139\u013b\3\2\2\2\u013a\u013c\7\20\2\2\u013b")
+ buf.write("\u013a\3\2\2\2\u013b\u013c\3\2\2\2\u013c\63\3\2\2\2\u013d")
+ buf.write("\u0140\7\37\2\2\u013e\u0140\7 \2\2\u013f\u013d\3\2\2\2")
+ buf.write("\u013f\u013e\3\2\2\2\u0140\65\3\2\2\2\64:AHKPW\\_dkqv")
+ buf.write("{~\u0083\u0088\u008f\u0094\u0097\u009c\u00a1\u00aa\u00af")
+ buf.write("\u00b2\u00b7\u00bb\u00c0\u00c4\u00c9\u00d0\u00d3\u00d9")
+ buf.write("\u00e2\u00ef\u00f4\u00fd\u0102\u0105\u010a\u0110\u0113")
+ buf.write("\u0118\u0121\u0126\u012a\u012d\u0132\u0138\u013b\u013f")
return buf.getvalue()
@@ -166,7 +170,7 @@ class TParser ( Parser ):
literalNames = [ "<INVALID>", "'import'", "';'", "'module'", "'interface'",
"'extends'", "'{'", "'}'", "'void'", "'('", "')'",
- "'signal'", "'readonly'", "'const'", "','", "'='",
+ "'const'", "'signal'", "'readonly'", "','", "'='",
"'bool'", "'int'", "'real'", "'string'", "'var'", "'list'",
"'<'", "'>'", "'model'", "'struct'", "'enum'", "'flag'" ]
@@ -189,28 +193,29 @@ class TParser ( Parser ):
RULE_interfaceSymbol = 5
RULE_interfaceMemberSymbol = 6
RULE_operationSymbol = 7
- RULE_signalSymbol = 8
- RULE_propertySymbol = 9
- RULE_propertyModifierSymbol = 10
- RULE_operationParameterSymbol = 11
- RULE_tagSymbol = 12
- RULE_tagAttributeSymbol = 13
- RULE_typeSymbol = 14
- RULE_complexTypeSymbol = 15
- RULE_primitiveTypeSymbol = 16
- RULE_listTypeSymbol = 17
- RULE_modelTypeSymbol = 18
- RULE_structSymbol = 19
- RULE_structFieldSymbol = 20
- RULE_enumSymbol = 21
- RULE_enumTypeSymbol = 22
- RULE_enumMemberSymbol = 23
- RULE_intSymbol = 24
+ RULE_operationModifierSymbol = 8
+ RULE_signalSymbol = 9
+ RULE_propertySymbol = 10
+ RULE_propertyModifierSymbol = 11
+ RULE_operationParameterSymbol = 12
+ RULE_tagSymbol = 13
+ RULE_tagAttributeSymbol = 14
+ RULE_typeSymbol = 15
+ RULE_complexTypeSymbol = 16
+ RULE_primitiveTypeSymbol = 17
+ RULE_listTypeSymbol = 18
+ RULE_modelTypeSymbol = 19
+ RULE_structSymbol = 20
+ RULE_structFieldSymbol = 21
+ RULE_enumSymbol = 22
+ RULE_enumTypeSymbol = 23
+ RULE_enumMemberSymbol = 24
+ RULE_intSymbol = 25
ruleNames = [ "documentSymbol", "headerSymbol", "importSymbol", "moduleSymbol",
"definitionSymbol", "interfaceSymbol", "interfaceMemberSymbol",
- "operationSymbol", "signalSymbol", "propertySymbol",
- "propertyModifierSymbol", "operationParameterSymbol",
+ "operationSymbol", "operationModifierSymbol", "signalSymbol",
+ "propertySymbol", "propertyModifierSymbol", "operationParameterSymbol",
"tagSymbol", "tagAttributeSymbol", "typeSymbol", "complexTypeSymbol",
"primitiveTypeSymbol", "listTypeSymbol", "modelTypeSymbol",
"structSymbol", "structFieldSymbol", "enumSymbol", "enumTypeSymbol",
@@ -307,15 +312,15 @@ class TParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 50
+ self.state = 52
self.headerSymbol()
- self.state = 54
+ self.state = 56
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__3) | (1 << TParser.T__24) | (1 << TParser.T__25) | (1 << TParser.T__26) | (1 << TParser.TAGLINE) | (1 << TParser.DOCCOMMENT))) != 0):
- self.state = 51
+ self.state = 53
self.definitionSymbol()
- self.state = 56
+ self.state = 58
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -371,15 +376,15 @@ class TParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 57
+ self.state = 59
self.moduleSymbol()
- self.state = 61
+ self.state = 63
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.T__0:
- self.state = 58
+ self.state = 60
self.importSymbol()
- self.state = 63
+ self.state = 65
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -432,17 +437,17 @@ class TParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 64
+ self.state = 66
self.match(TParser.T__0)
- self.state = 65
+ self.state = 67
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 66
- localctx.version = self.match(TParser.VERSION)
self.state = 68
+ localctx.version = self.match(TParser.VERSION)
+ self.state = 70
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 67
+ self.state = 69
self.match(TParser.T__1)
@@ -506,35 +511,35 @@ class TParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 71
+ self.state = 73
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 70
+ self.state = 72
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 76
+ self.state = 78
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 73
+ self.state = 75
self.tagSymbol()
- self.state = 78
+ self.state = 80
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 79
+ self.state = 81
self.match(TParser.T__2)
- self.state = 80
+ self.state = 82
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 81
- localctx.version = self.match(TParser.VERSION)
self.state = 83
+ localctx.version = self.match(TParser.VERSION)
+ self.state = 85
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 82
+ self.state = 84
self.match(TParser.T__1)
@@ -589,24 +594,24 @@ class TParser ( Parser ):
localctx = TParser.DefinitionSymbolContext(self, self._ctx, self.state)
self.enterRule(localctx, 8, self.RULE_definitionSymbol)
try:
- self.state = 88
+ self.state = 90
self._errHandler.sync(self)
la_ = self._interp.adaptivePredict(self._input,6,self._ctx)
if la_ == 1:
self.enterOuterAlt(localctx, 1)
- self.state = 85
+ self.state = 87
self.interfaceSymbol()
pass
elif la_ == 2:
self.enterOuterAlt(localctx, 2)
- self.state = 86
+ self.state = 88
self.structSymbol()
pass
elif la_ == 3:
self.enterOuterAlt(localctx, 3)
- self.state = 87
+ self.state = 89
self.enumSymbol()
pass
@@ -678,57 +683,57 @@ class TParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 91
+ self.state = 93
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 90
+ self.state = 92
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 96
+ self.state = 98
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 93
+ self.state = 95
self.tagSymbol()
- self.state = 98
+ self.state = 100
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 99
+ self.state = 101
self.match(TParser.T__3)
- self.state = 100
+ self.state = 102
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 103
+ self.state = 105
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__4:
- self.state = 101
+ self.state = 103
self.match(TParser.T__4)
- self.state = 102
+ self.state = 104
localctx.extends = self.match(TParser.IDENTIFIER)
- self.state = 105
+ self.state = 107
self.match(TParser.T__5)
- self.state = 109
+ self.state = 111
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__7) | (1 << TParser.T__10) | (1 << TParser.T__11) | (1 << TParser.T__12) | (1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__19) | (1 << TParser.T__20) | (1 << TParser.T__23) | (1 << TParser.TAGLINE) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0):
- self.state = 106
+ self.state = 108
self.interfaceMemberSymbol()
- self.state = 111
+ self.state = 113
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 112
- self.match(TParser.T__6)
self.state = 114
+ self.match(TParser.T__6)
+ self.state = 116
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 113
+ self.state = 115
self.match(TParser.T__1)
@@ -783,24 +788,24 @@ class TParser ( Parser ):
localctx = TParser.InterfaceMemberSymbolContext(self, self._ctx, self.state)
self.enterRule(localctx, 12, self.RULE_interfaceMemberSymbol)
try:
- self.state = 119
+ self.state = 121
self._errHandler.sync(self)
la_ = self._interp.adaptivePredict(self._input,12,self._ctx)
if la_ == 1:
self.enterOuterAlt(localctx, 1)
- self.state = 116
+ self.state = 118
self.operationSymbol()
pass
elif la_ == 2:
self.enterOuterAlt(localctx, 2)
- self.state = 117
+ self.state = 119
self.propertySymbol()
pass
elif la_ == 3:
self.enterOuterAlt(localctx, 3)
- self.state = 118
+ self.state = 120
self.signalSymbol()
pass
@@ -842,6 +847,10 @@ class TParser ( Parser ):
return self.getTypedRuleContext(TParser.OperationParameterSymbolContext,i)
+ def operationModifierSymbol(self):
+ return self.getTypedRuleContext(TParser.OperationModifierSymbolContext,0)
+
+
def DOCCOMMENT(self):
return self.getToken(TParser.DOCCOMMENT, 0)
@@ -872,59 +881,67 @@ class TParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 122
+ self.state = 124
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 121
+ self.state = 123
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 127
+ self.state = 129
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 124
+ self.state = 126
self.tagSymbol()
- self.state = 129
+ self.state = 131
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 132
+ self.state = 134
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [TParser.T__15, TParser.T__16, TParser.T__17, TParser.T__18, TParser.T__19, TParser.T__20, TParser.T__23, TParser.IDENTIFIER]:
- self.state = 130
+ self.state = 132
self.typeSymbol()
pass
elif token in [TParser.T__7]:
- self.state = 131
+ self.state = 133
self.match(TParser.T__7)
pass
else:
raise NoViableAltException(self)
- self.state = 134
+ self.state = 136
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 135
+ self.state = 137
self.match(TParser.T__8)
- self.state = 139
+ self.state = 141
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__19) | (1 << TParser.T__20) | (1 << TParser.T__23) | (1 << TParser.IDENTIFIER))) != 0):
- self.state = 136
+ self.state = 138
self.operationParameterSymbol()
- self.state = 141
+ self.state = 143
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 142
- self.match(TParser.T__9)
self.state = 144
+ self.match(TParser.T__9)
+ self.state = 146
+ self._errHandler.sync(self)
+ la_ = self._interp.adaptivePredict(self._input,17,self._ctx)
+ if la_ == 1:
+ self.state = 145
+ self.operationModifierSymbol()
+
+
+ self.state = 149
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 143
+ self.state = 148
self.match(TParser.T__1)
@@ -936,6 +953,50 @@ class TParser ( Parser ):
self.exitRule()
return localctx
+ class OperationModifierSymbolContext(ParserRuleContext):
+
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+ super().__init__(parent, invokingState)
+ self.parser = parser
+ self.is_const = None # Token
+
+
+ def getRuleIndex(self):
+ return TParser.RULE_operationModifierSymbol
+
+ def enterRule(self, listener:ParseTreeListener):
+ if hasattr( listener, "enterOperationModifierSymbol" ):
+ listener.enterOperationModifierSymbol(self)
+
+ def exitRule(self, listener:ParseTreeListener):
+ if hasattr( listener, "exitOperationModifierSymbol" ):
+ listener.exitOperationModifierSymbol(self)
+
+ def accept(self, visitor:ParseTreeVisitor):
+ if hasattr( visitor, "visitOperationModifierSymbol" ):
+ return visitor.visitOperationModifierSymbol(self)
+ else:
+ return visitor.visitChildren(self)
+
+
+
+
+ def operationModifierSymbol(self):
+
+ localctx = TParser.OperationModifierSymbolContext(self, self._ctx, self.state)
+ self.enterRule(localctx, 16, self.RULE_operationModifierSymbol)
+ try:
+ self.enterOuterAlt(localctx, 1)
+ self.state = 151
+ localctx.is_const = self.match(TParser.T__10)
+ except RecognitionException as re:
+ localctx.exception = re
+ self._errHandler.reportError(self, re)
+ self._errHandler.recover(self, re)
+ finally:
+ self.exitRule()
+ return localctx
+
class SignalSymbolContext(ParserRuleContext):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
@@ -987,51 +1048,51 @@ class TParser ( Parser ):
def signalSymbol(self):
localctx = TParser.SignalSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 16, self.RULE_signalSymbol)
+ self.enterRule(localctx, 18, self.RULE_signalSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 147
+ self.state = 154
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 146
+ self.state = 153
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 152
+ self.state = 159
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 149
+ self.state = 156
self.tagSymbol()
- self.state = 154
+ self.state = 161
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 155
- self.match(TParser.T__10)
- self.state = 156
+ self.state = 162
+ self.match(TParser.T__11)
+ self.state = 163
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 157
+ self.state = 164
self.match(TParser.T__8)
- self.state = 161
+ self.state = 168
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__19) | (1 << TParser.T__20) | (1 << TParser.T__23) | (1 << TParser.IDENTIFIER))) != 0):
- self.state = 158
+ self.state = 165
self.operationParameterSymbol()
- self.state = 163
+ self.state = 170
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 164
+ self.state = 171
self.match(TParser.T__9)
- self.state = 166
+ self.state = 173
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 165
+ self.state = 172
self.match(TParser.T__1)
@@ -1095,45 +1156,45 @@ class TParser ( Parser ):
def propertySymbol(self):
localctx = TParser.PropertySymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 18, self.RULE_propertySymbol)
+ self.enterRule(localctx, 20, self.RULE_propertySymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 169
+ self.state = 176
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 168
+ self.state = 175
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 174
+ self.state = 181
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 171
+ self.state = 178
self.tagSymbol()
- self.state = 176
+ self.state = 183
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 178
+ self.state = 185
self._errHandler.sync(self)
_la = self._input.LA(1)
- if _la==TParser.T__11 or _la==TParser.T__12:
- self.state = 177
+ if _la==TParser.T__10 or _la==TParser.T__12:
+ self.state = 184
self.propertyModifierSymbol()
- self.state = 180
+ self.state = 187
self.typeSymbol()
- self.state = 181
+ self.state = 188
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 183
+ self.state = 190
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 182
+ self.state = 189
self.match(TParser.T__1)
@@ -1177,20 +1238,20 @@ class TParser ( Parser ):
def propertyModifierSymbol(self):
localctx = TParser.PropertyModifierSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 20, self.RULE_propertyModifierSymbol)
+ self.enterRule(localctx, 22, self.RULE_propertyModifierSymbol)
try:
- self.state = 187
+ self.state = 194
self._errHandler.sync(self)
token = self._input.LA(1)
- if token in [TParser.T__11]:
+ if token in [TParser.T__12]:
self.enterOuterAlt(localctx, 1)
- self.state = 185
- localctx.is_readonly = self.match(TParser.T__11)
+ self.state = 192
+ localctx.is_readonly = self.match(TParser.T__12)
pass
- elif token in [TParser.T__12]:
+ elif token in [TParser.T__10]:
self.enterOuterAlt(localctx, 2)
- self.state = 186
- localctx.is_const = self.match(TParser.T__12)
+ self.state = 193
+ localctx.is_const = self.match(TParser.T__10)
pass
else:
raise NoViableAltException(self)
@@ -1240,19 +1301,19 @@ class TParser ( Parser ):
def operationParameterSymbol(self):
localctx = TParser.OperationParameterSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 22, self.RULE_operationParameterSymbol)
+ self.enterRule(localctx, 24, self.RULE_operationParameterSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 189
+ self.state = 196
self.typeSymbol()
- self.state = 190
+ self.state = 197
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 192
+ self.state = 199
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__13:
- self.state = 191
+ self.state = 198
self.match(TParser.T__13)
@@ -1297,10 +1358,10 @@ class TParser ( Parser ):
def tagSymbol(self):
localctx = TParser.TagSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 24, self.RULE_tagSymbol)
+ self.enterRule(localctx, 26, self.RULE_tagSymbol)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 194
+ self.state = 201
localctx.line = self.match(TParser.TAGLINE)
except RecognitionException as re:
localctx.exception = re
@@ -1347,27 +1408,27 @@ class TParser ( Parser ):
def tagAttributeSymbol(self):
localctx = TParser.TagAttributeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 26, self.RULE_tagAttributeSymbol)
+ self.enterRule(localctx, 28, self.RULE_tagAttributeSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 196
+ self.state = 203
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 199
+ self.state = 206
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__14:
- self.state = 197
+ self.state = 204
self.match(TParser.T__14)
- self.state = 198
+ self.state = 205
localctx.value = self.match(TParser.IDENTIFIER)
- self.state = 202
+ self.state = 209
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__13:
- self.state = 201
+ self.state = 208
self.match(TParser.T__13)
@@ -1424,29 +1485,29 @@ class TParser ( Parser ):
def typeSymbol(self):
localctx = TParser.TypeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 28, self.RULE_typeSymbol)
+ self.enterRule(localctx, 30, self.RULE_typeSymbol)
try:
- self.state = 208
+ self.state = 215
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [TParser.T__15, TParser.T__16, TParser.T__17, TParser.T__18, TParser.T__19]:
self.enterOuterAlt(localctx, 1)
- self.state = 204
+ self.state = 211
self.primitiveTypeSymbol()
pass
elif token in [TParser.IDENTIFIER]:
self.enterOuterAlt(localctx, 2)
- self.state = 205
+ self.state = 212
self.complexTypeSymbol()
pass
elif token in [TParser.T__20]:
self.enterOuterAlt(localctx, 3)
- self.state = 206
+ self.state = 213
self.listTypeSymbol()
pass
elif token in [TParser.T__23]:
self.enterOuterAlt(localctx, 4)
- self.state = 207
+ self.state = 214
self.modelTypeSymbol()
pass
else:
@@ -1493,10 +1554,10 @@ class TParser ( Parser ):
def complexTypeSymbol(self):
localctx = TParser.ComplexTypeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 30, self.RULE_complexTypeSymbol)
+ self.enterRule(localctx, 32, self.RULE_complexTypeSymbol)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 210
+ self.state = 217
localctx.name = self.match(TParser.IDENTIFIER)
except RecognitionException as re:
localctx.exception = re
@@ -1537,34 +1598,34 @@ class TParser ( Parser ):
def primitiveTypeSymbol(self):
localctx = TParser.PrimitiveTypeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 32, self.RULE_primitiveTypeSymbol)
+ self.enterRule(localctx, 34, self.RULE_primitiveTypeSymbol)
try:
- self.state = 217
+ self.state = 224
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [TParser.T__15]:
self.enterOuterAlt(localctx, 1)
- self.state = 212
+ self.state = 219
localctx.name = self.match(TParser.T__15)
pass
elif token in [TParser.T__16]:
self.enterOuterAlt(localctx, 2)
- self.state = 213
+ self.state = 220
localctx.name = self.match(TParser.T__16)
pass
elif token in [TParser.T__17]:
self.enterOuterAlt(localctx, 3)
- self.state = 214
+ self.state = 221
localctx.name = self.match(TParser.T__17)
pass
elif token in [TParser.T__18]:
self.enterOuterAlt(localctx, 4)
- self.state = 215
+ self.state = 222
localctx.name = self.match(TParser.T__18)
pass
elif token in [TParser.T__19]:
self.enterOuterAlt(localctx, 5)
- self.state = 216
+ self.state = 223
localctx.name = self.match(TParser.T__19)
pass
else:
@@ -1612,16 +1673,16 @@ class TParser ( Parser ):
def listTypeSymbol(self):
localctx = TParser.ListTypeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 34, self.RULE_listTypeSymbol)
+ self.enterRule(localctx, 36, self.RULE_listTypeSymbol)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 219
+ self.state = 226
self.match(TParser.T__20)
- self.state = 220
+ self.state = 227
self.match(TParser.T__21)
- self.state = 221
+ self.state = 228
localctx.valueType = self.typeSymbol()
- self.state = 222
+ self.state = 229
self.match(TParser.T__22)
except RecognitionException as re:
localctx.exception = re
@@ -1665,16 +1726,16 @@ class TParser ( Parser ):
def modelTypeSymbol(self):
localctx = TParser.ModelTypeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 36, self.RULE_modelTypeSymbol)
+ self.enterRule(localctx, 38, self.RULE_modelTypeSymbol)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 224
+ self.state = 231
self.match(TParser.T__23)
- self.state = 225
+ self.state = 232
self.match(TParser.T__21)
- self.state = 226
+ self.state = 233
localctx.valueType = self.typeSymbol()
- self.state = 227
+ self.state = 234
self.match(TParser.T__22)
except RecognitionException as re:
localctx.exception = re
@@ -1735,51 +1796,51 @@ class TParser ( Parser ):
def structSymbol(self):
localctx = TParser.StructSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 38, self.RULE_structSymbol)
+ self.enterRule(localctx, 40, self.RULE_structSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 230
+ self.state = 237
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 229
+ self.state = 236
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 235
+ self.state = 242
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 232
+ self.state = 239
self.tagSymbol()
- self.state = 237
+ self.state = 244
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 238
+ self.state = 245
self.match(TParser.T__24)
- self.state = 239
+ self.state = 246
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 240
+ self.state = 247
self.match(TParser.T__5)
- self.state = 244
+ self.state = 251
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.T__15) | (1 << TParser.T__16) | (1 << TParser.T__17) | (1 << TParser.T__18) | (1 << TParser.T__19) | (1 << TParser.T__20) | (1 << TParser.T__23) | (1 << TParser.TAGLINE) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0):
- self.state = 241
+ self.state = 248
self.structFieldSymbol()
- self.state = 246
+ self.state = 253
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 247
+ self.state = 254
self.match(TParser.T__6)
- self.state = 249
+ self.state = 256
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 248
+ self.state = 255
self.match(TParser.T__1)
@@ -1839,37 +1900,37 @@ class TParser ( Parser ):
def structFieldSymbol(self):
localctx = TParser.StructFieldSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 40, self.RULE_structFieldSymbol)
+ self.enterRule(localctx, 42, self.RULE_structFieldSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 252
+ self.state = 259
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 251
+ self.state = 258
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 257
+ self.state = 264
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 254
+ self.state = 261
self.tagSymbol()
- self.state = 259
+ self.state = 266
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 260
+ self.state = 267
self.typeSymbol()
- self.state = 261
+ self.state = 268
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 263
+ self.state = 270
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 262
+ self.state = 269
self.match(TParser.T__1)
@@ -1936,51 +1997,51 @@ class TParser ( Parser ):
def enumSymbol(self):
localctx = TParser.EnumSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 42, self.RULE_enumSymbol)
+ self.enterRule(localctx, 44, self.RULE_enumSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 266
+ self.state = 273
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 265
+ self.state = 272
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 271
+ self.state = 278
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 268
+ self.state = 275
self.tagSymbol()
- self.state = 273
+ self.state = 280
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 274
+ self.state = 281
self.enumTypeSymbol()
- self.state = 275
+ self.state = 282
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 276
+ self.state = 283
self.match(TParser.T__5)
- self.state = 280
+ self.state = 287
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << TParser.TAGLINE) | (1 << TParser.IDENTIFIER) | (1 << TParser.DOCCOMMENT))) != 0):
- self.state = 277
+ self.state = 284
self.enumMemberSymbol()
- self.state = 282
+ self.state = 289
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 283
+ self.state = 290
self.match(TParser.T__6)
- self.state = 285
+ self.state = 292
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__1:
- self.state = 284
+ self.state = 291
self.match(TParser.T__1)
@@ -2024,19 +2085,19 @@ class TParser ( Parser ):
def enumTypeSymbol(self):
localctx = TParser.EnumTypeSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 44, self.RULE_enumTypeSymbol)
+ self.enterRule(localctx, 46, self.RULE_enumTypeSymbol)
try:
- self.state = 289
+ self.state = 296
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [TParser.T__25]:
self.enterOuterAlt(localctx, 1)
- self.state = 287
+ self.state = 294
localctx.isEnum = self.match(TParser.T__25)
pass
elif token in [TParser.T__26]:
self.enterOuterAlt(localctx, 2)
- self.state = 288
+ self.state = 295
localctx.isFlag = self.match(TParser.T__26)
pass
else:
@@ -2098,45 +2159,45 @@ class TParser ( Parser ):
def enumMemberSymbol(self):
localctx = TParser.EnumMemberSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 46, self.RULE_enumMemberSymbol)
+ self.enterRule(localctx, 48, self.RULE_enumMemberSymbol)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 292
+ self.state = 299
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.DOCCOMMENT:
- self.state = 291
+ self.state = 298
localctx.comment = self.match(TParser.DOCCOMMENT)
- self.state = 297
+ self.state = 304
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==TParser.TAGLINE:
- self.state = 294
+ self.state = 301
self.tagSymbol()
- self.state = 299
+ self.state = 306
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 300
+ self.state = 307
localctx.name = self.match(TParser.IDENTIFIER)
- self.state = 303
+ self.state = 310
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__14:
- self.state = 301
+ self.state = 308
self.match(TParser.T__14)
- self.state = 302
+ self.state = 309
self.intSymbol()
- self.state = 306
+ self.state = 313
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==TParser.T__13:
- self.state = 305
+ self.state = 312
self.match(TParser.T__13)
@@ -2184,19 +2245,19 @@ class TParser ( Parser ):
def intSymbol(self):
localctx = TParser.IntSymbolContext(self, self._ctx, self.state)
- self.enterRule(localctx, 48, self.RULE_intSymbol)
+ self.enterRule(localctx, 50, self.RULE_intSymbol)
try:
- self.state = 310
+ self.state = 317
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [TParser.INTCONSTANT]:
self.enterOuterAlt(localctx, 1)
- self.state = 308
+ self.state = 315
localctx.value = self.match(TParser.INTCONSTANT)
pass
elif token in [TParser.HEXCONSTANT]:
self.enterOuterAlt(localctx, 2)
- self.state = 309
+ self.state = 316
localctx.value = self.match(TParser.HEXCONSTANT)
pass
else:
diff --git a/qface/idl/parser/TVisitor.py b/qface/idl/parser/TVisitor.py
index d30a617..9836d57 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#operationModifierSymbol.
+ def visitOperationModifierSymbol(self, ctx:TParser.OperationModifierSymbolContext):
+ return self.visitChildren(ctx)
+
+
# Visit a parse tree produced by TParser#signalSymbol.
def visitSignalSymbol(self, ctx:TParser.SignalSymbolContext):
return self.visitChildren(ctx)
diff --git a/qface/idl/profile.py b/qface/idl/profile.py
new file mode 100644
index 0000000..4b376c9
--- /dev/null
+++ b/qface/idl/profile.py
@@ -0,0 +1,36 @@
+# Copyright (c) Pelagicore AB 2016
+
+from enum import Enum
+
+
+class EFeature(Enum):
+ CONST_PROPERTY = 'const_property'
+ EXTEND_INTERFACE = 'extend_interface'
+
+
+class EProfile(Enum):
+ BASIC = 'basic'
+ ADVANCED = 'advanced'
+ ALL = 'advanced'
+
+
+class Profile:
+ def __init__(self, features=set()):
+ self.features = features
+
+ @staticmethod
+ def get_profile(cls, name):
+ if name is EProfile.BASIC:
+ return Profile(features=[
+ ])
+ if name is EProfile.ADVANCED:
+ return Profile(features=[
+ EFeature.CONST_PROPERTY,
+ EFeature.EXTEND_INTERFACE
+ ])
+ if name is EProfile.ALL:
+ return Profile(features=[
+ ])
+ return []
+
+
diff --git a/tests/in/com.pelagicore.ivi.tuner.qface b/tests/in/com.pelagicore.ivi.tuner.qface
index 38c9b00..790472e 100644
--- a/tests/in/com.pelagicore.ivi.tuner.qface
+++ b/tests/in/com.pelagicore.ivi.tuner.qface
@@ -18,6 +18,8 @@ interface Tuner extends BaseTuner {
const Station defaultStation;
/** operation nextStation */
void nextStation();
+ /** operation numStations */
+ int numStations() const;
/** operation previousStation */
void previousStation();
/** operation updateCurrentStation */
diff --git a/tests/test_parser.py b/tests/test_parser.py
index 7cf59e6..a27a31b 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -68,6 +68,9 @@ def test_operation():
assert operation
operation = interface._contentMap['previousStation']
assert operation
+ operation = interface._contentMap['numStations']
+ assert operation
+ assert operation.const
def test_signals():