~ubuntu-branches/debian/squeeze/erlang/squeeze

« back to all changes in this revision

Viewing changes to lib/megaco/src/text/megaco_text_parser_v3.yrl

  • Committer: Bazaar Package Importer
  • Author(s): Erlang Packagers, Sergei Golovan
  • Date: 2006-12-03 17:07:44 UTC
  • mfrom: (2.1.11 feisty)
  • Revision ID: james.westby@ubuntu.com-20061203170744-rghjwupacqlzs6kv
Tags: 1:11.b.2-4
[ Sergei Golovan ]
Fixed erlang-base and erlang-base-hipe prerm scripts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
%% ``The contents of this file are subject to the Erlang Public License,
 
2
%% Version 1.1, (the "License"); you may not use this file except in
 
3
%% compliance with the License. You should have received a copy of the
 
4
%% Erlang Public License along with this software. If not, it can be
 
5
%% retrieved via the world wide web at http://www.erlang.org/.
 
6
%% 
 
7
%% Software distributed under the License is distributed on an "AS IS"
 
8
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 
9
%% the License for the specific language governing rights and limitations
 
10
%% under the License.
 
11
%% 
 
12
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
 
13
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
 
14
%% AB. All Rights Reserved.''
 
15
%% 
 
16
%%     $Id$
 
17
%%
 
18
%%----------------------------------------------------------------------
 
19
%% Purpose: YECC grammar for text encoding of Megaco/H.248
 
20
%%----------------------------------------------------------------------
 
21
 
 
22
%%----------------------------------------------------------------------
 
23
%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
 
24
%%
 
25
%% B.1 Coding of wildcards
 
26
%%
 
27
%% In a text encoding of the protocol, while TerminationIDs are
 
28
%% arbitrary, by judicious choice of names, the wildcard character, "*"
 
29
%% may be made more useful.  When the wildcard character is encountered,
 
30
%% it will "match" all TerminationIDs having the same previous and
 
31
%% following characters (if appropriate).  For example, if there were
 
32
%% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
 
33
%% R13/3/* would match all of them.  There are some circumstances where
 
34
%% ALL Terminations must be referred to.  The TerminationID "*" suffices,
 
35
%% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to
 
36
%% signal to the MG that it has to create an ephemeral Termination or
 
37
%% select an idle physical Termination.
 
38
%%
 
39
%% B.2 ABNF specification
 
40
%%
 
41
%% The protocol syntax is presented in ABNF according to RFC2234.  The
 
42
%% protocol is not case sensitive.  Identifiers are not case sensitive.
 
43
%% 
 
44
%% NOTE 1 - This syntax specification does not enforce all restrictions 
 
45
%%          on element inclusions and values.  Some additional 
 
46
%%          restrictions are stated in comments and other restrictions 
 
47
%%          appear in the text of this Recommendation. These additional 
 
48
%%          restrictions are part of the protocol even though not 
 
49
%%          enforced by this Recommendation.
 
50
%% NOTE 2 - The syntax is context-dependent. For example, "Add" can be 
 
51
%%          the AddToken or a NAME depending on the context in which it 
 
52
%%          occurs.
 
53
%% 
 
54
%% Everything in the ABNF and text encoding is case insensitive. This 
 
55
%% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as 
 
56
%% per RFC 2327.
 
57
%% 
 
58
%%----------------------------------------------------------------------
 
59
 
 
60
%%----------------------------------------------------------------------
 
61
%% Non-terminals
 
62
%%----------------------------------------------------------------------
 
63
 
 
64
Nonterminals
 
65
 
 
66
    actionReply
 
67
    actionReplyBody
 
68
    actionReplyList
 
69
    actionRequest
 
70
    actionRequestBody
 
71
    actionRequestItem
 
72
    actionRequestItems
 
73
    actionRequestList
 
74
    alternativeValue
 
75
    ammParameter
 
76
    ammParameters
 
77
    ammRequest
 
78
    ammRequestBody
 
79
    ammToken
 
80
    ammsReply
 
81
    ammsReplyBody
 
82
    ammsToken
 
83
    auditDescriptor
 
84
    auditDescriptorBody
 
85
    auditItem
 
86
    auditItemList
 
87
    auditOther
 
88
    auditReply
 
89
    auditRequest
 
90
    auditReturnItem
 
91
    auditReturnParameter
 
92
    auditReturnParameterList
 
93
    authenticationHeader
 
94
    commandReplyList
 
95
    commandReplys                     %% v3
 
96
    commandRequest
 
97
    contextAttrDescriptor             %% v3
 
98
    contextAttrDescProp               %% v3
 
99
    contextAttrDescProps              %% v3
 
100
    contextAudit
 
101
    contextAuditProperties
 
102
    contextAuditProperty
 
103
    contextID
 
104
    contextProperties                 %% v3 
 
105
    contextProperty
 
106
    contextTerminationAudit
 
107
    daddr
 
108
    deviceName
 
109
    digitMapDescriptor
 
110
    direction                         %% v3 
 
111
    domainAddress
 
112
    domainName
 
113
    embedFirst
 
114
    embedNoSig
 
115
    embedSig
 
116
    embedWithSig
 
117
    errorCode
 
118
    errorDescriptor
 
119
    errorText
 
120
    eventBufferControl
 
121
    eventBufferControlState
 
122
    eventBufferDescriptor
 
123
    eventDM
 
124
    eventParameter
 
125
    eventParameterName
 
126
    eventParameters
 
127
    eventSpec
 
128
    eventSpecList
 
129
    eventStream
 
130
    eventStreamOrOther
 
131
    eventsDescriptor
 
132
    extension
 
133
    extensionParameter
 
134
 
 
135
    %% v2 - start
 
136
    indAudauditReturnParameter
 
137
    indAuddigitMapDescriptor
 
138
    indAudeventBufferDescriptor
 
139
    indAudeventSpec
 
140
    indAudeventSpecParameter
 
141
    %% indAudeventSpecParameterList
 
142
    indAudeventsDescriptor
 
143
    indAudlocalControlDescriptor
 
144
    indAudlocalParm
 
145
    indAudlocalParmList
 
146
    indAudmediaDescriptor
 
147
    indAudmediaParm
 
148
    %% indAudmediaParmList
 
149
    indAudpackagesDescriptor
 
150
    indAudrequestedEvent
 
151
    indAudsignalsDescriptor
 
152
    indAudsignalList
 
153
    %% indAudsignalListParm
 
154
    indAudsignalParm
 
155
    %% indAudsignalRequest
 
156
    indAudstreamDescriptor
 
157
    indAudstreamParm
 
158
    indAudstatisticsDescriptor
 
159
    indAudterminationAudit
 
160
    indAudterminationAuditList
 
161
    indAudterminationStateDescriptor
 
162
    indAudterminationStateParm
 
163
    %% indAudterminationStateParmList
 
164
    optIndAudeventSpecParameter
 
165
    optIndAudsignalParm
 
166
    %% v2 - end
 
167
 
 
168
    indAudcontextAttrDescriptor       %% v3
 
169
 
 
170
    localControlDescriptor
 
171
    localParm
 
172
    localParmList
 
173
    mId
 
174
    mediaDescriptor
 
175
    mediaParm
 
176
    mediaParmList
 
177
    megacoMessage
 
178
    message
 
179
    messageBody
 
180
    modemDescriptor   % Deprecated as of Corr 1 
 
181
    modemType         % Deprecated as of Corr 1 
 
182
    modemTypeList     % Deprecated as of Corr 1 
 
183
    mtpAddress
 
184
    muxDescriptor
 
185
    muxType
 
186
    notificationReason
 
187
    notificationReasons
 
188
    notifyReply
 
189
    notifyReplyBody
 
190
    notifyRequest
 
191
    notifyRequestBody
 
192
    observedEvent
 
193
    observedEventBody
 
194
    observedEventParameter
 
195
    observedEventParameters
 
196
    % observedEventTimeStamp
 
197
    observedEvents
 
198
    observedEventsDescriptor
 
199
    onOrOff
 
200
    optAuditDescriptor
 
201
    optImmAckRequired
 
202
    optPropertyParms
 
203
    optSep
 
204
    packagesDescriptor
 
205
    packagesItem
 
206
    packagesItems
 
207
    %% parmName
 
208
    parmValue
 
209
    pathName
 
210
    pkgdName
 
211
    portNumber
 
212
    priority
 
213
    propertyParm
 
214
    propertyParms
 
215
    requestID
 
216
    requestedEvent
 
217
    requestedEventBody
 
218
    requestedEvents
 
219
    safeToken
 
220
    secondEventParameter
 
221
    secondEventParameters
 
222
    secondRequestedEvent
 
223
    secondRequestedEventBody
 
224
    secondRequestedEvents
 
225
    servChgReplyParm
 
226
    servChgReplyParms
 
227
    serviceChangeAddress
 
228
    serviceChangeDelay
 
229
    serviceChangeDescriptor
 
230
    serviceChangeMethod
 
231
    serviceChangeMgcId
 
232
    serviceChangeParm
 
233
    serviceChangeParms
 
234
    serviceChangeProfile 
 
235
    serviceChangeReason
 
236
    serviceChangeReply
 
237
    serviceChangeReplyBody
 
238
    serviceChangeReplyDescriptor
 
239
    serviceChangeRequest
 
240
    serviceChangeVersion
 
241
    serviceState
 
242
    serviceStates
 
243
    sigParameter
 
244
    sigParameters
 
245
    signalList
 
246
    signalListId
 
247
    signalListParm
 
248
    signalListParms
 
249
    signalName
 
250
    signalParm
 
251
    signalParms
 
252
    signalRequest
 
253
    signalsDescriptor
 
254
    signalType
 
255
    statisticsDescriptor
 
256
    statisticsParameter
 
257
    statisticsParameters
 
258
    streamDescriptor
 
259
    streamID
 
260
    streamModes
 
261
    streamParm
 
262
    streamParmList
 
263
    subtractRequest
 
264
    terminationA
 
265
    terminationAudit
 
266
    terminationB
 
267
    terminationID
 
268
    terminationIDList
 
269
    terminationIDListRepeat
 
270
    terminationStateDescriptor
 
271
    terminationStateParm
 
272
    terminationStateParms
 
273
    timeStamp
 
274
    topologyDescriptor
 
275
    topologyDirection
 
276
    topologyTriple
 
277
    topologyTripleList
 
278
    transactionAck
 
279
    transactionAckList
 
280
    transactionID
 
281
    transactionItem
 
282
    transactionList
 
283
    transactionPending
 
284
    transactionReply
 
285
    transactionReplyBody
 
286
    transactionRequest
 
287
    transactionResponseAck
 
288
    value
 
289
    valueList
 
290
 
 
291
.
 
292
 
 
293
%%----------------------------------------------------------------------
 
294
%% Terminals
 
295
%%----------------------------------------------------------------------
 
296
 
 
297
Terminals
 
298
 
 
299
    'AddToken'
 
300
    'AuditCapToken'
 
301
    'AuditToken'
 
302
    'AuditValueToken'
 
303
    'AuthToken'
 
304
    'BothToken'                       %% v3 
 
305
    'BothwayToken'
 
306
    'BriefToken'
 
307
    'BufferToken'
 
308
    'COLON'
 
309
    'COMMA'
 
310
    'ContextAttrToken'                %% v3 
 
311
    'ContextAuditToken'
 
312
    'CtxToken'
 
313
    'DelayToken'
 
314
    'DigitMapToken'
 
315
    'DigitMapDescriptorToken'
 
316
    'DirectionToken'                  %% v3 
 
317
    'DiscardToken'
 
318
    'DisconnectedToken'
 
319
    'DurationToken'
 
320
    'EQUAL'
 
321
    'EmbedToken'
 
322
    'EmergencyToken'
 
323
    'EmergencyOffToken'
 
324
    'ErrorToken'
 
325
    'EventBufferToken'
 
326
    'EventsToken'
 
327
    'ExternalToken'                   %% v3 
 
328
    'FailoverToken'
 
329
    'ForcedToken'
 
330
    'GREATER'
 
331
    'GracefulToken'
 
332
    'H221Token'
 
333
    'H223Token'
 
334
    'H226Token'
 
335
    'HandOffToken'
 
336
    'IEPSToken'                       %% v3
 
337
    'ImmAckRequiredToken'
 
338
    'InSvcToken'
 
339
    'InactiveToken'
 
340
    'InternalToken'                   %% v3 
 
341
    'InterruptByEventToken'
 
342
    'InterruptByNewSignalsDescrToken'
 
343
    'IsolateToken'
 
344
    'KeepActiveToken'
 
345
    'LBRKT'
 
346
    'LESSER'
 
347
    'LSBRKT'
 
348
    'LocalControlToken'
 
349
    'LocalDescriptorToken'
 
350
    'LockStepToken'
 
351
    'LoopbackToken'
 
352
    'MediaToken'
 
353
    %% 'MegacopToken'
 
354
    'MethodToken'
 
355
    'MgcIdToken'
 
356
    'ModeToken'
 
357
    'ModemToken'
 
358
    'ModifyToken'
 
359
    'MoveToken'
 
360
    'MtpAddressToken'
 
361
    'MuxToken'
 
362
    'NEQUAL'
 
363
    'NotifyCompletionToken'
 
364
    'NotifyToken'
 
365
    'Nx64Token'  %% v2
 
366
    'ObservedEventsToken'
 
367
    'OffToken'
 
368
    'OnToken'
 
369
    'OnOffToken'
 
370
    'OnewayToken'
 
371
    'OtherReasonToken'
 
372
    'OutOfSvcToken'
 
373
    'PackagesToken'
 
374
    'PendingToken'
 
375
    'PriorityToken'
 
376
    'ProfileToken'
 
377
    'QuotedChars'
 
378
    'RBRKT'
 
379
    'RSBRKT'
 
380
    'ReasonToken'
 
381
    'RecvonlyToken'
 
382
    'RemoteDescriptorToken'
 
383
    'ReplyToken'
 
384
    'RequestIDToken'                  %% v3 
 
385
    'ReservedGroupToken'
 
386
    'ReservedValueToken'
 
387
    'ResponseAckToken'
 
388
    'RestartToken'
 
389
    'SEP'
 
390
    'SafeChars'
 
391
    'SendonlyToken'
 
392
    'SendrecvToken'
 
393
    'ServiceChangeAddressToken'
 
394
    'ServiceChangeToken'
 
395
    'ServiceChangeIncompleteToken'
 
396
    'ServiceStatesToken'
 
397
    'ServicesToken'
 
398
    'SignalListToken'
 
399
    'SignalTypeToken'
 
400
    'SignalsToken'
 
401
    'StatsToken'
 
402
    'StreamToken'
 
403
    'SubtractToken'
 
404
    'SynchISDNToken'
 
405
    'TerminationStateToken'
 
406
    'TestToken'
 
407
    'TimeOutToken'
 
408
    'TimeStampToken'
 
409
    'TopologyToken'
 
410
    'TransToken'
 
411
    'V18Token'
 
412
    'V22Token'
 
413
    'V22bisToken'
 
414
    'V32Token'
 
415
    'V32bisToken'
 
416
    'V34Token'
 
417
    'V76Token'
 
418
    'V90Token'
 
419
    'V91Token'
 
420
    'VersionToken'
 
421
    endOfMessage
 
422
 
 
423
.
 
424
 
 
425
%%----------------------------------------------------------------------
 
426
%% Root symbol
 
427
%%----------------------------------------------------------------------
 
428
 
 
429
Rootsymbol megacoMessage.
 
430
 
 
431
%%----------------------------------------------------------------------
 
432
%% The grammar
 
433
%%----------------------------------------------------------------------
 
434
 
 
435
%% megacoMessage        = LWSP [authenticationHeader SEP ] message
 
436
%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
 
437
%%                        SequenceNum COLON AuthData
 
438
%%                      
 
439
%% SecurityParmIndex    = "0x" 8(HEXDIG)
 
440
%% SequenceNum          = "0x" 8(HEXDIG)
 
441
%% AuthData             = "0x" 24*64(HEXDIG)
 
442
%% message              = MegacopToken SLASH version SEP mId SEP messageBody
 
443
%% version              = 1*2(DIGIT) .
 
444
 
 
445
megacoMessage        -> optSep authenticationHeader message endOfMessage
 
446
                            : #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
 
447
 
 
448
optSep               -> 'SEP'    : sep .
 
449
optSep               -> '$empty' : no_sep .
 
450
 
 
451
authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
 
452
                            safeToken 'COLON' safeToken optSep
 
453
                            : ensure_auth_header('$3', '$5', '$7') .
 
454
authenticationHeader -> '$empty' : asn1_NOVALUE .
 
455
 
 
456
message              -> safeToken mId messageBody : ensure_message('$1', '$2', '$3') .
 
457
 
 
458
messageBody          -> errorDescriptor : {messageError, '$1'} .
 
459
messageBody          -> transactionList : {transactions, '$1'} .
 
460
 
 
461
transactionList      -> transactionItem : ['$1'] .
 
462
transactionList      -> transactionItem transactionList : ['$1' | '$2'] .
 
463
 
 
464
transactionItem      -> transactionRequest      : {transactionRequest,     '$1'} .
 
465
transactionItem      -> transactionReply        : {transactionReply,       '$1'}.
 
466
transactionItem      -> transactionPending      : {transactionPending,     '$1'} .
 
467
transactionItem      -> transactionResponseAck  : {transactionResponseAck, '$1'} .
 
468
 
 
469
transactionResponseAck -> 'ResponseAckToken'
 
470
                          'LBRKT' transactionAck transactionAckList 'RBRKT' : ['$3' | '$4'] .
 
471
 
 
472
transactionAckList   -> 'COMMA' transactionAck transactionAckList : ['$2' | '$3'] .
 
473
transactionAckList   -> '$empty' : [] .
 
474
 
 
475
transactionAck       -> safeToken : ensure_transactionAck('$1') .
 
476
 
 
477
transactionPending   -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT'
 
478
                            : #'TransactionPending'{transactionId = ensure_transactionID('$3') } .
 
479
 
 
480
transactionRequest   -> 'TransToken' 
 
481
                        'LBRKT'  actionRequest actionRequestList 'RBRKT'
 
482
                            : #'TransactionRequest'{transactionId = asn1_NOVALUE,
 
483
                                                    actions = ['$3' | '$4']} .
 
484
transactionRequest   -> 'TransToken' 'EQUAL' 
 
485
                        'LBRKT'  actionRequest actionRequestList 'RBRKT'
 
486
                            : #'TransactionRequest'{transactionId = asn1_NOVALUE,
 
487
                                                    actions = ['$4' | '$5']} .
 
488
transactionRequest   -> 'TransToken' 'EQUAL' transactionID
 
489
                        'LBRKT'  actionRequest actionRequestList 'RBRKT'
 
490
                            : #'TransactionRequest'{transactionId = ensure_transactionID('$3'),
 
491
                                                    actions = ['$5' | '$6']} .
 
492
 
 
493
actionRequestList    -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] .
 
494
actionRequestList    -> '$empty' : [] .
 
495
 
 
496
actionRequest        -> 'CtxToken' 'EQUAL' contextID
 
497
                        'LBRKT' actionRequestBody 'RBRKT'
 
498
                        : merge_action_request('$3', '$5') .
 
499
 
 
500
actionRequestBody    -> actionRequestItem actionRequestItems : ['$1' | '$2'] .
 
501
    
 
502
actionRequestItems   -> 'COMMA' actionRequestItem actionRequestItems  
 
503
                        : ['$2' | '$3'] .
 
504
actionRequestItems   -> '$empty' : [] .
 
505
 
 
506
actionRequestItem    -> contextProperties : {contextProps,   '$1'} .
 
507
actionRequestItem    -> contextAudit      : {contextAudit,   '$1'} .
 
508
actionRequestItem    -> commandRequest    : {commandRequest, '$1'} .
 
509
 
 
510
contextProperties     -> contextAttrDescriptor : 
 
511
                         merge_context_request(#'ContextRequest'{}, '$1') .
 
512
 
 
513
contextAttrDescriptor -> 'ContextAttrToken' 
 
514
                         'LBRKT' contextAttrDescProp 
 
515
                                 contextAttrDescProps 'RBRKT' 
 
516
                         : ['$3' | '$4'] .
 
517
              
 
518
contextAttrDescProp  -> contextProperty : '$1' .
 
519
 
 
520
contextAttrDescProps -> 'COMMA' contextAttrDescProp contextAttrDescProps 
 
521
                         : ['$2' | '$3'] .
 
522
contextAttrDescProps -> '$empty' : [] .
 
523
 
 
524
%% at-most-once
 
525
contextProperty      -> topologyDescriptor  : {topology,    '$1'}.
 
526
contextProperty      -> priority            : {priority,    '$1'}. 
 
527
contextProperty      -> 'EmergencyToken'    : {emergency,   true}.
 
528
contextProperty      -> 'EmergencyOffToken' : {emergency,   false}.
 
529
contextProperty      -> 'IEPSToken'         : {iepsCallind, true} .  % BMK BMK
 
530
contextProperty      -> propertyParm        : {prop,        '$1'} . 
 
531
 
 
532
contextAudit -> 'ContextAuditToken' 'LBRKT' indAudcontextAttrDescriptor 'RBRKT'
 
533
                : merge_context_attr_audit_request(
 
534
                         #'ContextAttrAuditRequest'{}, '$3') .
 
535
 
 
536
indAudcontextAttrDescriptor -> 'ContextAttrToken' 
 
537
                               'LBRKT' contextAuditProperty 
 
538
                                       contextAuditProperties 'RBRKT' 
 
539
                               : ['$3' | '$4'] .
 
540
 
 
541
contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties  
 
542
                          : ['$2' | '$3'] .
 
543
contextAuditProperties -> '$empty' : [] .
 
544
 
 
545
%% at-most-once .
 
546
contextAuditProperty -> 'TopologyToken'  : topologyAudit .
 
547
contextAuditProperty -> 'EmergencyToken' : emergencyAudit .
 
548
contextAuditProperty -> 'PriorityToken'  : priorityAudit .
 
549
contextAuditProperty -> 'IEPSToken'      : iepsCallind .
 
550
contextAuditProperty -> pkgdName         : {prop, '$1'} .
 
551
 
 
552
commandRequest       -> ammRequest             : '$1'.
 
553
commandRequest       -> subtractRequest        : '$1'.
 
554
commandRequest       -> auditRequest           : '$1'.
 
555
commandRequest       -> notifyRequest          : '$1'.
 
556
commandRequest       -> serviceChangeRequest   : '$1'.
 
557
 
 
558
transactionReply     -> 'ReplyToken' 'EQUAL' transactionID 
 
559
                            'LBRKT'
 
560
                                optImmAckRequired transactionReplyBody
 
561
                            'RBRKT'
 
562
                            : #'TransactionReply'{transactionId     = '$3',
 
563
                                                  immAckRequired    = '$5',
 
564
                                                  transactionResult = '$6'} .
 
565
 
 
566
optImmAckRequired    -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' .
 
567
optImmAckRequired    -> '$empty' : asn1_NOVALUE .
 
568
     
 
569
transactionReplyBody -> errorDescriptor              : {transactionError, '$1'} .
 
570
transactionReplyBody -> actionReply actionReplyList  : {actionReplies, ['$1' | '$2']} .
 
571
 
 
572
actionReplyList      -> 'COMMA' actionReply actionReplyList  : ['$2' | '$3'] .
 
573
actionReplyList      -> '$empty' : [] .
 
574
 
 
575
actionReply          -> 'CtxToken' 'EQUAL' contextID 
 
576
                        'LBRKT' actionReplyBody 'RBRKT' : 
 
577
                        setelement(#'ActionReply'.contextId, '$5', '$3') .
 
578
 
 
579
actionReplyBody      -> errorDescriptor :  
 
580
                        #'ActionReply'{errorDescriptor = '$1'} .
 
581
actionReplyBody      -> commandReplys commandReplyList : 
 
582
                        merge_action_reply(['$1' | '$2']) .
 
583
 
 
584
%% OTP-5085
 
585
%% This ugly thing is to fool the parser. The errorDescriptor does not
 
586
%% realy belong here. The merge_action_reply will remove it and put it
 
587
%% in it's right place later.
 
588
commandReplyList     -> 'COMMA' errorDescriptor :
 
589
                         [{error, '$2'}] .
 
590
commandReplyList     -> 'COMMA' commandReplys commandReplyList  : 
 
591
                         ['$2' | '$3'] .
 
592
commandReplyList     -> '$empty' : [] .
 
593
 
 
594
commandReplys         -> serviceChangeReply  : {command, '$1'} .
 
595
commandReplys         -> auditReply          : {command, '$1'} .
 
596
commandReplys         -> ammsReply           : {command, '$1'} .
 
597
commandReplys         -> notifyReply         : {command, '$1'} .
 
598
commandReplys         -> contextProperties   : {context, '$1'} .
 
599
 
 
600
%Add Move and Modify have the same request parameter
 
601
ammRequest           -> ammToken 'EQUAL' terminationID ammRequestBody : 
 
602
                        Descs = merge_AmmRequest_descriptors('$4', []),
 
603
                        make_commandRequest('$1',
 
604
                                            #'AmmRequest'{terminationID = ['$3'],
 
605
                                                          descriptors   = Descs}) .
 
606
 
 
607
ammToken             -> 'AddToken'     : {addReq,  '$1'} .
 
608
ammToken             -> 'MoveToken'    : {moveReq, '$1'} .
 
609
ammToken             -> 'ModifyToken'  : {modReq,  '$1'} .
 
610
 
 
611
ammRequestBody       -> 'LBRKT' ammParameter ammParameters 'RBRKT'  : ['$2' | '$3'] .
 
612
ammRequestBody       -> '$empty' : [] .
 
613
 
 
614
ammParameters        -> 'COMMA' ammParameter ammParameters  :  ['$2' | '$3'] .
 
615
ammParameters        -> '$empty' : [] .
 
616
 
 
617
%at-most-once
 
618
ammParameter         -> mediaDescriptor        : {mediaDescriptor,       '$1'}.
 
619
ammParameter         -> modemDescriptor        : {modemDescriptor, deprecated}.
 
620
ammParameter         -> muxDescriptor          : {muxDescriptor,         '$1'}.
 
621
ammParameter         -> eventsDescriptor       : {eventsDescriptor,      '$1'}.
 
622
ammParameter         -> eventBufferDescriptor  : {eventBufferDescriptor, '$1'}.
 
623
ammParameter         -> signalsDescriptor      : {signalsDescriptor,     '$1'}.
 
624
ammParameter         -> digitMapDescriptor     : {digitMapDescriptor,    '$1'}.
 
625
ammParameter         -> auditDescriptor        : {auditDescriptor,       '$1'}.
 
626
ammParameter         -> statisticsDescriptor   : {statisticsDescriptor,  '$1'}.
 
627
 
 
628
ammsReply            -> ammsToken 'EQUAL' terminationID ammsReplyBody
 
629
                            :  {'$1', #'AmmsReply'{terminationID = ['$3'],
 
630
                                                   terminationAudit = '$4'}} .
 
631
 
 
632
ammsToken            -> 'AddToken'       : addReply .
 
633
ammsToken            -> 'MoveToken'      : moveReply .
 
634
ammsToken            -> 'ModifyToken'    : modReply .
 
635
ammsToken            -> 'SubtractToken'  : subtractReply .
 
636
 
 
637
ammsReplyBody        -> 'LBRKT' terminationAudit 'RBRKT' : '$2' .
 
638
ammsReplyBody        -> '$empty' : asn1_NOVALUE .
 
639
 
 
640
subtractRequest      -> 'SubtractToken' 'EQUAL' terminationID 
 
641
                                                optAuditDescriptor
 
642
                        : make_commandRequest({subtractReq, '$1'},
 
643
                                               #'SubtractRequest'{terminationID = ['$3'],
 
644
                                                                  auditDescriptor = '$4'}) .
 
645
  
 
646
 
 
647
optAuditDescriptor   -> 'LBRKT' auditDescriptor 'RBRKT'  : '$2'.
 
648
optAuditDescriptor   -> '$empty'                         : asn1_NOVALUE .
 
649
 
 
650
auditRequest -> 'AuditValueToken' 'EQUAL' 
 
651
                terminationID optAuditDescriptor : 
 
652
                make_commandRequest({auditValueRequest, '$1'},
 
653
                                    #'AuditRequest'{terminationID   = '$3',
 
654
                                                    auditDescriptor = '$4'}) .
 
655
auditRequest -> 'AuditCapToken' 'EQUAL' 
 
656
                terminationID optAuditDescriptor : 
 
657
                make_commandRequest({auditCapRequest, '$1'},
 
658
                                    #'AuditRequest'{terminationID   = '$3',
 
659
                                                    auditDescriptor = '$4'}) .
 
660
 
 
661
auditReply -> 'AuditValueToken' 'EQUAL' 'CtxToken' contextTerminationAudit
 
662
                  : {auditValueReply, '$4'} .
 
663
auditReply -> 'AuditCapToken'   'EQUAL' 'CtxToken' contextTerminationAudit
 
664
                  : {auditCapReply,   '$4'} .
 
665
auditReply -> 'AuditValueToken' 'EQUAL' auditOther
 
666
                  : {auditValueReply, '$3'} .
 
667
auditReply -> 'AuditCapToken'   'EQUAL' auditOther
 
668
                  : {auditCapReply,   '$3'} .
 
669
 
 
670
contextTerminationAudit -> terminationIDList               : {contextAuditResult, '$1'} .
 
671
contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' : {contextAuditResult, '$2'} .
 
672
 
 
673
auditOther              -> terminationID : 
 
674
                           {auditResult, 
 
675
                            #'AuditResult'{terminationID          = '$1',
 
676
                                           terminationAuditResult = []}} .
 
677
auditOther              -> terminationID 'LBRKT' terminationAudit 'RBRKT' :
 
678
                           {auditResult, 
 
679
                            #'AuditResult'{terminationID          = '$1',
 
680
                                           terminationAuditResult = '$3'}} .
 
681
                                  
 
682
 
 
683
terminationAudit     -> auditReturnParameter auditReturnParameterList : 
 
684
                        merge_terminationAudit(['$1' |'$2' ]) .
 
685
 
 
686
auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] .
 
687
auditReturnParameterList -> '$empty' : [] .
 
688
 
 
689
auditReturnParameter -> mediaDescriptor           : {mediaDescriptor, '$1'} .
 
690
auditReturnParameter -> modemDescriptor.
 
691
auditReturnParameter -> muxDescriptor             : {muxDescriptor, '$1'} .
 
692
auditReturnParameter -> eventsDescriptor          : {eventsDescriptor, '$1'} .
 
693
auditReturnParameter -> signalsDescriptor         : {signalsDescriptor, '$1'} .
 
694
auditReturnParameter -> digitMapDescriptor        : {digitMapDescriptor, '$1'} .
 
695
auditReturnParameter -> observedEventsDescriptor  : {observedEventsDescriptor, '$1'} .
 
696
auditReturnParameter -> eventBufferDescriptor     : {eventBufferDescriptor, '$1'} .
 
697
auditReturnParameter -> statisticsDescriptor      : {statisticsDescriptor, '$1'} .
 
698
auditReturnParameter -> packagesDescriptor        : {packagesDescriptor, '$1'} .
 
699
auditReturnParameter -> errorDescriptor           : {errorDescriptor, '$1'} .
 
700
auditReturnParameter -> auditReturnItem           : {auditReturnItem, '$1'} .
 
701
 
 
702
auditDescriptor      -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' : 
 
703
                        merge_auditDescriptor('$3') .
 
704
 
 
705
auditDescriptorBody  -> auditItem auditItemList : ['$1' | '$2'].
 
706
auditDescriptorBody  -> '$empty'                : asn1_NOVALUE .
 
707
 
 
708
auditItemList        -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] .
 
709
auditItemList        -> '$empty'                        : [] .
 
710
 
 
711
%% IGv11 - begin
 
712
%% 
 
713
auditReturnItem      -> 'MuxToken'             : muxToken .
 
714
auditReturnItem      -> 'ModemToken'           : modemToken .
 
715
auditReturnItem      -> 'MediaToken'           : mediaToken .
 
716
auditReturnItem      -> 'DigitMapToken'        : digitMapToken .
 
717
auditReturnItem      -> 'StatsToken'           : statsToken .
 
718
auditReturnItem      -> 'ObservedEventsToken'  : observedEventsToken .
 
719
auditReturnItem      -> 'PackagesToken'        : packagesToken .
 
720
 
 
721
%% at-most-once, and DigitMapToken and PackagesToken are not allowed 
 
722
%% in AuditCapabilities command 
 
723
auditItem          -> auditReturnItem        : '$1' .
 
724
auditItem          -> 'SignalsToken'         : signalsToken.
 
725
auditItem          -> 'EventBufferToken'     : eventBufferToken.
 
726
auditItem          -> 'EventsToken'          : eventsToken .
 
727
auditItem          -> indAudterminationAudit : {terminationAudit, '$1'} . % v2
 
728
%% 
 
729
%% IGv11 - end
 
730
 
 
731
 
 
732
%% v2 - start
 
733
%% 
 
734
indAudterminationAudit  -> indAudauditReturnParameter 
 
735
                           indAudterminationAuditList 
 
736
                           : ['$1' | '$2'] .
 
737
 
 
738
indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter 
 
739
                              indAudterminationAuditList  
 
740
                              : ['$2' | '$3'] .
 
741
indAudterminationAuditList -> '$empty' : [] .
 
742
 
 
743
indAudauditReturnParameter -> indAudmediaDescriptor 
 
744
                              : {indAudMediaDescriptor,       '$1'} .
 
745
indAudauditReturnParameter -> indAudeventsDescriptor 
 
746
                              : {indAudEventsDescriptor,      '$1'} .
 
747
indAudauditReturnParameter -> indAudsignalsDescriptor 
 
748
                              : {indAudSignalsDescriptor,     '$1'} .
 
749
indAudauditReturnParameter -> indAuddigitMapDescriptor 
 
750
                              : {indAudDigitMapDescriptor,    '$1'} .
 
751
indAudauditReturnParameter -> indAudeventBufferDescriptor 
 
752
                              : {indAudEventBufferDescriptor, '$1'} .
 
753
indAudauditReturnParameter -> indAudstatisticsDescriptor 
 
754
                              : {indAudStatisticsDescriptor,  '$1'} .
 
755
indAudauditReturnParameter -> indAudpackagesDescriptor 
 
756
                              : {indAudPackagesDescriptor,    '$1'} .
 
757
 
 
758
 
 
759
indAudmediaDescriptor -> 'MediaToken' 'LBRKT' 
 
760
                         indAudmediaParm  'RBRKT' 
 
761
                         : merge_indAudMediaDescriptor('$3') .
 
762
 
 
763
%% at-most-once per item
 
764
%% and either streamParm or streamDescriptor but not both
 
765
%% <rambling>
 
766
%% This is solved in another way in text than in binary :(
 
767
%% Instead of having a list of indAudmediaParm we put this
 
768
%% stuff in the indAudterminationAuditList with several 
 
769
%% indAudmediaDescriptor's. 
 
770
%% </rambling>
 
771
%% 
 
772
 
 
773
indAudmediaParm -> indAudstreamParm                 : {streamParm,     '$1'} .
 
774
indAudmediaParm -> indAudstreamDescriptor           : {streamDescr,    '$1'} .
 
775
indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} .
 
776
 
 
777
%% at-most-once
 
778
indAudstreamParm -> indAudlocalControlDescriptor 
 
779
                    : #'IndAudStreamParms'{localControlDescriptor = '$1'} .
 
780
indAudstreamParm -> indAudstatisticsDescriptor 
 
781
                    : #'IndAudStreamParms'{statisticsDescriptor = '$1'} .
 
782
 
 
783
indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID 
 
784
                          'LBRKT' indAudstreamParm 'RBRKT' 
 
785
                          : #'IndAudStreamDescriptor'{streamID    = '$3',
 
786
                                                      streamParms = '$5'} .
 
787
 
 
788
 
 
789
indAudlocalControlDescriptor -> 'LocalControlToken' 
 
790
                                'LBRKT' indAudlocalParm indAudlocalParmList 'RBRKT' :
 
791
                                merge_indAudLocalControlDescriptor(['$3'| '$4']) .
 
792
 
 
793
indAudlocalParmList -> 'COMMA' indAudlocalParm indAudlocalParmList : ['$2'| '$3'] .
 
794
indAudlocalParmList -> '$empty' : [] .
 
795
 
 
796
%% at-most-once per item
 
797
%%  
 
798
indAudlocalParm -> safeToken : ensure_indAudLocalParm('$1') . 
 
799
 
 
800
indAudterminationStateDescriptor -> 'TerminationStateToken' 
 
801
                                    'LBRKT' indAudterminationStateParm 'RBRKT' 
 
802
                                    : 
 
803
                                    merge_indAudTerminationStateDescriptor('$3') .
 
804
 
 
805
%% at-most-once per item
 
806
%%
 
807
 
 
808
indAudterminationStateParm  -> safeToken : 
 
809
                               ensure_indAudTerminationStateParm('$1') . 
 
810
 
 
811
indAudeventBufferDescriptor -> 'EventBufferToken' 
 
812
                               'LBRKT' indAudeventSpec 'RBRKT' : '$3' .
 
813
 
 
814
indAudeventSpec -> pkgdName optIndAudeventSpecParameter 
 
815
                   : merge_indAudEventBufferDescriptor('$1','$2') .
 
816
 
 
817
optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT' 
 
818
                               : '$2' .
 
819
optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE .
 
820
 
 
821
 
 
822
indAudeventSpecParameter    -> eventStream        : {streamID, '$1'} .
 
823
indAudeventSpecParameter    -> eventParameterName : {eventParameterName, '$1'} .
 
824
 
 
825
indAudeventsDescriptor      -> 'EventsToken' 'EQUAL' requestID
 
826
                               'LBRKT' indAudrequestedEvent 'RBRKT' 
 
827
                               : #'IndAudEventsDescriptor'{requestID = '$3',
 
828
                                                           pkgdName  = '$5'} .
 
829
 
 
830
indAudrequestedEvent        -> pkgdName : '$1' .
 
831
 
 
832
 
 
833
indAudsignalsDescriptor     -> 'SignalsToken' optIndAudsignalParm : '$2' .
 
834
 
 
835
 
 
836
optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE .
 
837
optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT'  : '$2' .
 
838
 
 
839
indAudsignalParm -> indAudsignalList  : {seqSigList, '$1'} .
 
840
indAudsignalParm -> signalRequest     : {signal, ensure_indAudSignal('$1')} .
 
841
 
 
842
indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId
 
843
                    'LBRKT' signalListParm 'RBRKT' : 
 
844
                     #'IndAudSeqSigList'{id = ensure_uint16('$3'),
 
845
                                           signalList = 
 
846
                                           ensure_indAudSignalListParm('$5')} .
 
847
 
 
848
 
 
849
%% The DigitMapDescriptorToken is specially treated by the scanner
 
850
indAuddigitMapDescriptor   -> 'DigitMapDescriptorToken' : 
 
851
                              ensure_IADMD('$1') .
 
852
 
 
853
indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' : 
 
854
                              #'IndAudStatisticsDescriptor'{statName = '$3'} .
 
855
 
 
856
indAudpackagesDescriptor   -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT' 
 
857
                              : merge_indAudPackagesDescriptor('$3') .
 
858
 
 
859
eventStream                -> 'StreamToken' 'EQUAL' streamID : '$3' .
 
860
 
 
861
 
 
862
%% 
 
863
%% v2 - end
 
864
 
 
865
notifyRequest        -> 'NotifyToken' 'EQUAL' terminationID
 
866
                        'LBRKT' notifyRequestBody 'RBRKT'
 
867
                      : make_commandRequest({notifyReq, '$1'},
 
868
                                            setelement(#'NotifyRequest'.terminationID, '$5', ['$3'])) .
 
869
 
 
870
notifyRequestBody    -> observedEventsDescriptor  
 
871
                            : #'NotifyRequest'{observedEventsDescriptor = '$1'}.
 
872
notifyRequestBody    -> errorDescriptor
 
873
                            : #'NotifyRequest'{errorDescriptor = '$1'}.
 
874
 
 
875
notifyReply          -> 'NotifyToken' 'EQUAL' terminationID notifyReplyBody
 
876
                            : {notifyReply,
 
877
                               #'NotifyReply'{terminationID = ['$3'],
 
878
                                              errorDescriptor = '$4'}} .
 
879
 
 
880
notifyReplyBody      -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'.
 
881
notifyReplyBody      -> '$empty' : asn1_NOVALUE .
 
882
 
 
883
serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' terminationID
 
884
                        'LBRKT' serviceChangeDescriptor 'RBRKT'
 
885
                      : make_commandRequest({serviceChangeReq, '$1'},
 
886
                                            #'ServiceChangeRequest'{terminationID = ['$3'],
 
887
                                                                    serviceChangeParms = '$5'}) .
 
888
 
 
889
serviceChangeReply   -> 'ServiceChangeToken' 'EQUAL' terminationID serviceChangeReplyBody
 
890
                        : {serviceChangeReply,
 
891
                           #'ServiceChangeReply'{terminationID = ['$3'],
 
892
                                                 serviceChangeResult = '$4'}} .
 
893
 
 
894
serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT'
 
895
                              : {errorDescriptor, '$2'} .
 
896
serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT'
 
897
                              : {serviceChangeResParms, '$2'} .
 
898
serviceChangeReplyBody -> '$empty' : {serviceChangeResParms, #'ServiceChangeResParm'{}}.
 
899
 
 
900
errorDescriptor      -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT' errorText 'RBRKT'
 
901
                            : #'ErrorDescriptor'{errorCode = '$3',
 
902
                                                 errorText = '$5'} .
 
903
 
 
904
errorCode            -> safeToken : ensure_uint('$1', 0, 999) .
 
905
 
 
906
errorText            -> 'QuotedChars' : value_of('$1') .
 
907
errorText            -> '$empty'      : asn1_NOVALUE .
 
908
 
 
909
transactionID        -> safeToken : ensure_uint32('$1') .
 
910
 
 
911
mId                  -> domainName               : '$1' .
 
912
mId                  -> domainAddress            : '$1' .
 
913
mId                  -> optSep mtpAddress optSep : '$2' .
 
914
mId                  -> optSep deviceName optSep : '$2' .
 
915
 
 
916
domainName           -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
 
917
                            : ensure_domainName('$2', '$5') .
 
918
domainName           -> 'LESSER' safeToken 'GREATER'
 
919
                            : ensure_domainName('$2', asn1_NOVALUE) .
 
920
 
 
921
deviceName           -> pathName  : {deviceName, '$1'} .
 
922
 
 
923
%% '-' is used for NULL context
 
924
contextID            -> safeToken : ensure_contextID('$1') .
 
925
 
 
926
domainAddress        -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
 
927
                        : ensure_domainAddress('$2', '$5') .
 
928
domainAddress        -> 'LSBRKT' daddr 'RSBRKT'
 
929
                        : ensure_domainAddress('$2', asn1_NOVALUE) .
 
930
 
 
931
daddr -> '$empty'        : [] .
 
932
daddr -> 'COLON' daddr   : [colon| '$2'] .
 
933
daddr -> safeToken daddr : ['$1'| '$2'] .
 
934
 
 
935
 
 
936
portNumber           -> safeToken : ensure_uint16('$1') .
 
937
 
 
938
mtpAddress           -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
 
939
 
 
940
%% terminationIDList    -> LBRKT terminationID *(COMMA terminationID) RBRKT .
 
941
 
 
942
terminationIDList    -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT'  
 
943
                                 : ['$2' | '$3'] .
 
944
 
 
945
terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat
 
946
                                 : ['$2'| '$3'] .
 
947
terminationIDListRepeat -> '$empty' : [] .
 
948
 
 
949
 
 
950
pathName             -> safeToken : ensure_pathName('$1') . 
 
951
 
 
952
terminationID        -> safeToken : ensure_terminationID('$1') .
 
953
 
 
954
mediaDescriptor      -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT'
 
955
                            : merge_mediaDescriptor(['$3' | '$4']) .
 
956
 
 
957
mediaParmList        -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] .
 
958
mediaParmList        -> '$empty' : [] .
 
959
 
 
960
 
 
961
%% at-most-once per item
 
962
%% using either streamParms or streamDescriptors but not both
 
963
mediaParm            -> streamParm
 
964
                            : {streamParm, '$1'} .
 
965
mediaParm            -> streamDescriptor
 
966
                            : {streamDescriptor, '$1'} .
 
967
mediaParm            -> terminationStateDescriptor
 
968
                            : {termState, '$1'} .
 
969
 
 
970
%% at-most-onc .
 
971
%% Specially treated by the scanner.
 
972
streamParm           -> 'LocalDescriptorToken'
 
973
                      : {local, #'LocalRemoteDescriptor'{propGrps = ensure_prop_groups('$1')} } .
 
974
streamParm           -> 'RemoteDescriptorToken'
 
975
                      : {remote, #'LocalRemoteDescriptor'{propGrps = ensure_prop_groups('$1')}} .
 
976
streamParm           -> localControlDescriptor  : {control, '$1'} .
 
977
streamParm           -> statisticsDescriptor    : {statistics, '$1'} .
 
978
 
 
979
streamDescriptor     -> 'StreamToken' 'EQUAL' streamID
 
980
                        'LBRKT' streamParm streamParmList 'RBRKT'
 
981
                      : #'StreamDescriptor'{streamID    = '$3',
 
982
                                            streamParms = merge_streamParms(['$5' | '$6'])} .
 
983
 
 
984
streamParmList       -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] .
 
985
streamParmList       -> '$empty' : [] .
 
986
 
 
987
localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT'
 
988
                        : ['$3' | '$4'] .
 
989
 
 
990
localParmList        -> 'COMMA' localParm localParmList : ['$2' | '$3'] .
 
991
localParmList        -> '$empty': [] .
 
992
 
 
993
terminationStateDescriptor -> 'TerminationStateToken'
 
994
                              'LBRKT' terminationStateParm 
 
995
                                      terminationStateParms 'RBRKT'
 
996
                              : merge_terminationStateDescriptor(['$3' | '$4']) .
 
997
 
 
998
terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] .
 
999
terminationStateParms -> '$empty' : [] .
 
1000
 
 
1001
%% at-most-once per item except for propertyParm
 
1002
localParm            -> 'ReservedGroupToken' 'EQUAL' onOrOff : {group, '$3'} .
 
1003
localParm            -> 'ReservedValueToken' 'EQUAL' onOrOff : {value, '$3'} .
 
1004
localParm            -> 'ModeToken' 'EQUAL' streamModes      : {mode,  '$3'} .
 
1005
localParm            -> propertyParm                         : {prop,  '$1'} .
 
1006
   
 
1007
onOrOff              -> 'OnToken'  : true .
 
1008
onOrOff              -> 'OffToken' : false .
 
1009
   
 
1010
%% at-most-once    
 
1011
streamModes          -> 'SendonlyToken' : sendOnly .
 
1012
streamModes          -> 'RecvonlyToken' : recvOnly .
 
1013
streamModes          -> 'SendrecvToken' : sendRecv .
 
1014
streamModes          -> 'InactiveToken' : inactive .
 
1015
streamModes          -> 'LoopbackToken' : loopBack .
 
1016
 
 
1017
propertyParm         -> pkgdName parmValue : 
 
1018
                        setelement(#'PropertyParm'.name, '$2', '$1') .
 
1019
 
 
1020
parmValue            -> 'EQUAL' alternativeValue : 
 
1021
                         '$2' .
 
1022
 
 
1023
parmValue            -> 'NEQUAL'  value :
 
1024
                        #'PropertyParm'{value = ['$2'], 
 
1025
                                        extraInfo = {relation, unequalTo}} .
 
1026
parmValue            -> 'LESSER'  value :
 
1027
                        #'PropertyParm'{value = ['$2'], 
 
1028
                                        extraInfo = {relation, smallerThan}} .
 
1029
parmValue            -> 'GREATER' value : 
 
1030
                        #'PropertyParm'{value = ['$2'], 
 
1031
                                        extraInfo = {relation, greaterThan}} .
 
1032
 
 
1033
%% OTP-4013
 
1034
%% alternativeValue  = ( VALUE / 
 
1035
%%                       LSBRKT VALUE *(COMMA VALUE) RSBRKT  /
 
1036
%%                       LSBRKT VALUE COLON VALUE RSBRKT ) /
 
1037
%%                       LBRKT VALUE *(COMMA VALUE) RBRKT
 
1038
alternativeValue     -> 'LBRKT' value valueList 'RBRKT'
 
1039
                            : #'PropertyParm'{value     = ['$2' | '$3'],
 
1040
                                              extraInfo = {sublist, false}}. % OR
 
1041
 
 
1042
alternativeValue     -> 'LSBRKT' value 'COLON' value 'RSBRKT'
 
1043
                            : #'PropertyParm'{value     = ['$2', '$4'],
 
1044
                                              extraInfo = {range, true}}.
 
1045
 
 
1046
alternativeValue     -> 'LSBRKT' value valueList 'RSBRKT'
 
1047
                            : #'PropertyParm'{value     = ['$2' | '$3'],
 
1048
                                              extraInfo = {sublist, true}}. % AND
 
1049
 
 
1050
alternativeValue     -> value : 
 
1051
                        #'PropertyParm'{value = ['$1']} .
 
1052
 
 
1053
valueList            -> 'COMMA' value valueList : ['$2' | '$3'] .
 
1054
valueList            -> '$empty' : [] .
 
1055
 
 
1056
 
 
1057
eventBufferDescriptor -> 'EventBufferToken' : [] .
 
1058
eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec eventSpecList 'RBRKT'
 
1059
                         : ['$3' | '$4'] .
 
1060
 
 
1061
eventSpecList        -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] .
 
1062
eventSpecList        -> '$empty' : [] .
 
1063
 
 
1064
eventSpec            -> observedEvent : merge_eventSpec('$1') .
 
1065
 
 
1066
%% at-most-once per item except for propertyParm
 
1067
terminationStateParm -> serviceStates      : {serviceState, '$1'} .
 
1068
terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} .
 
1069
terminationStateParm -> propertyParm       : {propertyParm, '$1'} .
 
1070
 
 
1071
serviceStates        -> 'ServiceStatesToken' 'EQUAL' serviceState : '$3' .
 
1072
 
 
1073
serviceState         -> 'TestToken'     : test . 
 
1074
serviceState         -> 'OutOfSvcToken' : outOfSvc .
 
1075
serviceState         -> 'InSvcToken'    : inSvc .
 
1076
 
 
1077
eventBufferControl   -> 'BufferToken' 'EQUAL' eventBufferControlState : '$3' .
 
1078
 
 
1079
eventBufferControlState -> 'OffToken'      : off .
 
1080
eventBufferControlState -> 'LockStepToken' : lockStep .
 
1081
 
 
1082
muxDescriptor        -> 'MuxToken' 'EQUAL' muxType  terminationIDList : 
 
1083
                        #'MuxDescriptor'{muxType  = '$3',
 
1084
                                         termList = '$4'} .
 
1085
 
 
1086
muxType              -> safeToken : ensure_muxType('$1') .
 
1087
 
 
1088
streamID             -> safeToken : ensure_streamID('$1') .
 
1089
 
 
1090
pkgdName             -> safeToken : ensure_pkgdName('$1') .
 
1091
 
 
1092
eventsDescriptor     -> 'EventsToken' : 
 
1093
                        #'EventsDescriptor'{requestID = asn1_NOVALUE,
 
1094
                                            eventList = []} .
 
1095
eventsDescriptor     -> 'EventsToken' 'EQUAL' requestID
 
1096
                        'LBRKT' requestedEvent requestedEvents 'RBRKT' : 
 
1097
                        #'EventsDescriptor'{requestID = '$3',
 
1098
                                            eventList = ['$5' | '$6']} .
 
1099
 
 
1100
requestedEvents      -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3']  .
 
1101
requestedEvents      -> '$empty' : [] .
 
1102
 
 
1103
requestedEvent       -> pkgdName requestedEventBody : 
 
1104
                        setelement(#'RequestedEvent'.pkgdName, '$2', '$1') .
 
1105
 
 
1106
requestedEventBody   -> 'LBRKT' eventParameter eventParameters 'RBRKT' :
 
1107
                         merge_eventParameters(['$2' | '$3']) .
 
1108
requestedEventBody   -> '$empty' : #'RequestedEvent'{evParList = []} .
 
1109
 
 
1110
eventParameters      -> 'COMMA' eventParameter eventParameters : 
 
1111
                        ['$2' | '$3'] .
 
1112
eventParameters      -> '$empty' : [] .
 
1113
 
 
1114
%% at-most-once each of embedOrKeepActive , eventDM or eventStream
 
1115
eventParameter       -> 'KeepActiveToken'   : keepActive .
 
1116
eventParameter       -> embedWithSig        : '$1'.
 
1117
eventParameter       -> embedNoSig          : '$1'.
 
1118
eventParameter       -> eventDM             : '$1'.
 
1119
eventParameter       -> eventStreamOrOther  : '$1'.
 
1120
 
 
1121
embedWithSig         -> 'EmbedToken' 'LBRKT' signalsDescriptor 
 
1122
                            'COMMA' embedFirst 'RBRKT'
 
1123
                            : {embed, '$3', '$5'} .
 
1124
embedWithSig         -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
 
1125
                            : {embed, '$3', asn1_NOVALUE} .
 
1126
 
 
1127
embedNoSig           -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT'
 
1128
                            : {embed, asn1_NOVALUE, '$3'} .
 
1129
    
 
1130
embedFirst           -> 'EventsToken' : 
 
1131
                        #'SecondEventsDescriptor'{requestID = asn1_NOVALUE,
 
1132
                                                  eventList = []} .
 
1133
embedFirst           -> 'EventsToken' 'EQUAL' requestID
 
1134
                        'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' :
 
1135
                        #'SecondEventsDescriptor'{requestID = '$3',
 
1136
                                                  eventList = ['$5' | '$6']} .
 
1137
 
 
1138
secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] .
 
1139
secondRequestedEvents -> '$empty' : [] .
 
1140
 
 
1141
%% at-most-once of each
 
1142
secondRequestedEvent  -> pkgdName secondRequestedEventBody 
 
1143
                             : setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') .
 
1144
 
 
1145
secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT'
 
1146
                                    : merge_secondEventParameters(['$2' | '$3']) .
 
1147
secondRequestedEventBody -> '$empty' :  #'SecondRequestedEvent'{evParList = []} .
 
1148
 
 
1149
secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] .
 
1150
secondEventParameters -> '$empty' : [] .
 
1151
 
 
1152
%% at-most-once each of embedOrKeepActive , eventDM or eventStream
 
1153
secondEventParameter -> 'KeepActiveToken'    : keepActive .
 
1154
secondEventParameter -> embedSig             : '$1' .
 
1155
secondEventParameter -> eventDM              : '$1' .
 
1156
secondEventParameter -> eventStreamOrOther   : '$1' .
 
1157
 
 
1158
embedSig             -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
 
1159
                            : {second_embed, '$3'} .
 
1160
 
 
1161
eventStreamOrOther   -> eventParameterName parmValue : 
 
1162
                        select_stream_or_other('$1', '$2') .
 
1163
 
 
1164
eventParameterName   -> safeToken : ensure_NAME('$1') .
 
1165
 
 
1166
%% The DigitMapDescriptorToken is specially treated by the scanner
 
1167
eventDM              -> 'DigitMapDescriptorToken' : 
 
1168
                        ensure_eventDM('$1') .
 
1169
 
 
1170
%% H248S-IG (IGv11)
 
1171
signalsDescriptor    -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' :
 
1172
                         ['$3' | '$4'] .
 
1173
signalsDescriptor    -> 'SignalsToken' : [] .
 
1174
 
 
1175
signalParms          -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] .
 
1176
signalParms          -> '$empty' : [] .
 
1177
 
 
1178
signalParm           -> signalList    : {seqSigList, '$1'} .
 
1179
signalParm           -> signalRequest : {signal, '$1'} .
 
1180
 
 
1181
signalRequest        -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT'
 
1182
                            : merge_signalRequest('$1', ['$3' | '$4']).
 
1183
signalRequest        -> signalName : merge_signalRequest('$1', []).
 
1184
 
 
1185
sigParameters        -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] .
 
1186
sigParameters        -> '$empty' : [] .
 
1187
 
 
1188
%%    sigParameter    = sigStream / sigSignalType / sigDuration / sigOther / 
 
1189
%%                      notifyCompletion / KeepActiveToken / 
 
1190
%%                      direction / sigRequestID
 
1191
%%    sigStream            = StreamToken EQUAL StreamID 
 
1192
%%    sigOther             = sigParameterName parmValue 
 
1193
%%    sigParameterName     = NAME 
 
1194
%%    sigSignalType        = SignalTypeToken EQUAL signalType 
 
1195
%%    signalType           = (OnOffToken / TimeOutToken / BriefToken) 
 
1196
%%    sigDuration          = DurationToken EQUAL UINT16 
 
1197
%%    notifyCompletion     = NotifyCompletionToken EQUAL (LBRKT 
 
1198
%%                           notificationReason *(COMMA notificationReason) 
 
1199
%%                           RBRKT) 
 
1200
%%     
 
1201
%%    notificationReason   = ( TimeOutToken / InterruptByEventToken / 
 
1202
%%                             InterruptByNewSignalsDescrToken / 
 
1203
%%                             OtherReasonToken ) 
 
1204
%%    sigDirection         = DirectionToken EQUAL direction
 
1205
%%    sigRequestID         = RequestIDToken EQUAL RequestID
 
1206
 
 
1207
sigParameter -> 'StreamToken'     'EQUAL' streamID : 
 
1208
                {stream, '$3'}.
 
1209
sigParameter -> 'SignalTypeToken' 'EQUAL' signalType : 
 
1210
                {signal_type, '$3'} .
 
1211
sigParameter -> 'DurationToken'   'EQUAL' safeToken : 
 
1212
                {duration, ensure_uint16('$3')} .
 
1213
sigParameter -> 'NotifyCompletionToken' 'EQUAL'
 
1214
                'LBRKT' notificationReason notificationReasons 'RBRKT' : 
 
1215
                {notify_completion, ['$4' | '$5']} .
 
1216
sigParameter -> 'KeepActiveToken' : keepActive .
 
1217
sigParameter -> 'DirectionToken' 'EQUAL' direction : {direction, '$3'} .
 
1218
sigParameter -> 'RequestIDToken' 'EQUAL' requestID : {requestId, '$3'} .
 
1219
sigParameter -> safeToken parmValue : 
 
1220
                {other, ensure_NAME('$1'), '$2'}.
 
1221
 
 
1222
signalType   -> 'OnOffToken'   : onOff.
 
1223
signalType   -> 'TimeOutToken' : timeOut.
 
1224
signalType   -> 'BriefToken'   : brief.
 
1225
 
 
1226
direction    -> 'ExternalToken' : external .
 
1227
direction    -> 'InternalToken' : internal .
 
1228
direction    -> 'BothToken'     : both .
 
1229
 
 
1230
notificationReasons  -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] .
 
1231
notificationReasons  -> '$empty' : [] .
 
1232
 
 
1233
notificationReason   -> 'TimeOutToken' : onTimeOut .
 
1234
notificationReason   -> 'InterruptByEventToken' : onInterruptByEvent .
 
1235
notificationReason   -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr .
 
1236
notificationReason   -> 'OtherReasonToken' : otherReason .
 
1237
 
 
1238
signalList           -> 'SignalListToken' 'EQUAL' signalListId
 
1239
                        'LBRKT' signalListParm signalListParms 'RBRKT'
 
1240
                            : #'SeqSigList'{id = ensure_uint16('$3'),
 
1241
                                            signalList = ['$5' | '$6']} .
 
1242
 
 
1243
signalListParms      -> 'COMMA' signalListParm signalListParms : 
 
1244
                        ['$2' | '$3'] .
 
1245
signalListParms      -> '$empty' : [] .
 
1246
 
 
1247
signalListId         -> safeToken : ensure_uint16('$1') .
 
1248
 
 
1249
%% exactly once signalType,
 
1250
%% at most once duration and every signal parameter
 
1251
signalListParm       -> signalRequest  : '$1'.
 
1252
 
 
1253
signalName           -> pkgdName  : '$1'.
 
1254
 
 
1255
observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID
 
1256
                            'LBRKT' observedEvent observedEvents 'RBRKT'
 
1257
                      : #'ObservedEventsDescriptor'{requestId        = '$3',
 
1258
                                                    observedEventLst = ['$5' | '$6']} .
 
1259
 
 
1260
observedEvents       -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] .
 
1261
observedEvents       -> '$empty' : [] .
 
1262
 
 
1263
%%time per event, because it might be buffered
 
1264
 
 
1265
observedEvent        -> timeStamp optSep 'COLON' optSep pkgdName observedEventBody : 
 
1266
                        merge_observed_event('$6', '$5', '$1') .
 
1267
observedEvent        -> optSep pkgdName observedEventBody :
 
1268
                        merge_observed_event('$3', '$2', asn1_NOVALUE) .
 
1269
 
 
1270
observedEventBody    -> 'LBRKT' observedEventParameter 
 
1271
                                observedEventParameters 'RBRKT'
 
1272
                         : ['$2' | '$3'] .
 
1273
observedEventBody    -> '$empty' : [] .
 
1274
 
 
1275
observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] .
 
1276
observedEventParameters -> '$empty' : [] .
 
1277
 
 
1278
%%at-most-once eventStream, every eventParameterName at most once
 
1279
observedEventParameter -> eventStreamOrOther : '$1' .
 
1280
 
 
1281
requestID            -> safeToken : ensure_requestID('$1') .
 
1282
 
 
1283
%% Deprecated as of Corr 1
 
1284
modemDescriptor      -> 'ModemToken' 'EQUAL' modemType optPropertyParms .
 
1285
modemDescriptor      -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT' 
 
1286
                        optPropertyParms.
 
1287
modemTypeList        -> 'COMMA' modemType modemTypeList.
 
1288
modemTypeList        -> '$empty'.
 
1289
modemType            -> safeToken.
 
1290
       
 
1291
optPropertyParms     -> 'LBRKT' propertyParm propertyParms 'RBRKT' : 
 
1292
                        ['$2' | '$3'] .
 
1293
optPropertyParms     -> '$empty' : [] .
 
1294
       
 
1295
propertyParms        -> 'COMMA' propertyParm propertyParms :  ['$2' | '$3'] .
 
1296
propertyParms        -> '$empty' : [] .
 
1297
 
 
1298
% parmName             -> safeToken : ensure_NAME('$1') .
 
1299
 
 
1300
%% The DigitMapDescriptorToken is specially treated by the scanner
 
1301
digitMapDescriptor   -> 'DigitMapDescriptorToken' : 
 
1302
                        ensure_DMD('$1') .
 
1303
 
 
1304
%% each parameter at-most-once, except auditItem
 
1305
%% at most one of either serviceChangeAddress or serviceChangeMgcId but 
 
1306
%% not both. serviceChangeMethod and serviceChangeReason are REQUIRED
 
1307
serviceChangeDescriptor -> 'ServicesToken' 
 
1308
                           'LBRKT' serviceChangeParm 
 
1309
                                   serviceChangeParms 'RBRKT' :
 
1310
                            merge_ServiceChangeParm(['$3' | '$4']) .
 
1311
 
 
1312
serviceChangeParms   -> 'COMMA' serviceChangeParm serviceChangeParms : 
 
1313
                        ['$2' | '$3'] .
 
1314
serviceChangeParms   -> '$empty' : [] .
 
1315
 
 
1316
serviceChangeParm    -> serviceChangeMethod  : {method,     '$1'} .
 
1317
serviceChangeParm    -> serviceChangeReason  : {reason,     '$1'} .
 
1318
serviceChangeParm    -> serviceChangeDelay   : {delay,      '$1'} .
 
1319
serviceChangeParm    -> serviceChangeAddress : {address,    '$1'} .
 
1320
serviceChangeParm    -> serviceChangeProfile : {profile,    '$1'} .
 
1321
serviceChangeParm    -> extension            : {extension,  '$1'} .
 
1322
serviceChangeParm    -> timeStamp            : {time_stamp, '$1'} .
 
1323
serviceChangeParm    -> serviceChangeMgcId   : {mgc_id,     '$1'} .
 
1324
serviceChangeParm    -> serviceChangeVersion : {version,    '$1'} .
 
1325
serviceChangeParm    -> 'ServiceChangeIncompleteToken' : incomplete . % v3
 
1326
serviceChangeParm    -> auditItem            : {audit_item, '$1'} . % v2
 
1327
 
 
1328
serviceChangeMethod  -> 'MethodToken' 'EQUAL' safeToken : 
 
1329
                        ensure_serviceChangeMethod('$3') .    
 
1330
 
 
1331
serviceChangeReason  -> 'ReasonToken' 'EQUAL' value : ['$3'] .
 
1332
 
 
1333
serviceChangeDelay   -> 'DelayToken'  'EQUAL' safeToken : ensure_uint32('$3').
 
1334
 
 
1335
serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' .
 
1336
serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber : 
 
1337
                        {portNumber, '$3'} .
 
1338
 
 
1339
serviceChangeMgcId   -> 'MgcIdToken'   'EQUAL' mId       : '$3' .
 
1340
 
 
1341
serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3').
 
1342
 
 
1343
serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') .
 
1344
 
 
1345
extension            ->  extensionParameter parmValue
 
1346
                             : setelement(#'PropertyParm'.name, '$2', '$1') .
 
1347
 
 
1348
%% at most once. Version is REQUIRED on first ServiceChange response
 
1349
%% at most of either serviceChangeAddress or serviceChangeMgcId but not both 
 
1350
serviceChangeReplyDescriptor -> 'ServicesToken'
 
1351
                                'LBRKT' servChgReplyParm 
 
1352
                                        servChgReplyParms 'RBRKT' :
 
1353
                                merge_ServiceChangeResParm(['$3' | '$4']) .
 
1354
 
 
1355
servChgReplyParms    -> 'COMMA' servChgReplyParm servChgReplyParms : 
 
1356
                        ['$2' | '$3'] .
 
1357
servChgReplyParms    -> '$empty' :  [] .
 
1358
 
 
1359
servChgReplyParm     -> serviceChangeAddress : {address,   '$1'} .
 
1360
servChgReplyParm     -> serviceChangeMgcId   : {mgc_id,    '$1'} .
 
1361
servChgReplyParm     -> serviceChangeProfile : {profile,   '$1'} .
 
1362
servChgReplyParm     -> serviceChangeVersion : {version,   '$1'} .
 
1363
servChgReplyParm     -> timeStamp            : {time_stamp,'$1'} .
 
1364
 
 
1365
packagesDescriptor   -> 'PackagesToken' 'LBRKT' packagesItem 
 
1366
                                                packagesItems 'RBRKT'
 
1367
                        : ['$3' | '$4'] .
 
1368
 
 
1369
packagesItems        -> 'COMMA' packagesItem packagesItems  : ['$2' | '$3'] .
 
1370
packagesItems        -> '$empty' : [] .
 
1371
 
 
1372
packagesItem         -> safeToken : ensure_packagesItem('$1') .
 
1373
 
 
1374
timeStamp            -> TimeStampToken : ensure_timeStamp('$1') .
 
1375
 
 
1376
statisticsDescriptor -> 'StatsToken'
 
1377
                        'LBRKT' statisticsParameter 
 
1378
                                statisticsParameters 'RBRKT'
 
1379
                        : ['$3' | '$4'] .
 
1380
 
 
1381
statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters  : ['$2' | '$3'] .
 
1382
statisticsParameters -> '$empty' : [] .
 
1383
 
 
1384
%%at-most-once per item
 
1385
statisticsParameter  -> pkgdName 
 
1386
                            : #'StatisticsParameter'{statName  = '$1',
 
1387
                                                     statValue = asn1_NOVALUE} .
 
1388
statisticsParameter  -> pkgdName 'EQUAL' value
 
1389
                            : #'StatisticsParameter'{statName  = '$1',
 
1390
                                                     statValue = ['$3']} .
 
1391
 
 
1392
topologyDescriptor   -> 'TopologyToken' 'LBRKT' topologyTriple
 
1393
                        topologyTripleList 'RBRKT' : ['$3' | '$4'] .
 
1394
 
 
1395
terminationA         -> terminationID  : '$1' .
 
1396
 
 
1397
terminationB         -> terminationID  : '$1' .
 
1398
 
 
1399
topologyTriple       -> terminationA 'COMMA' 
 
1400
                        terminationB 'COMMA' 
 
1401
                        topologyDirection :
 
1402
                          #'TopologyRequest'{terminationFrom   = '$1',
 
1403
                                             terminationTo     = '$3',
 
1404
                                             topologyDirection = '$5'} .
 
1405
 
 
1406
topologyTripleList   -> '$empty' : [] .
 
1407
topologyTripleList   -> 'COMMA' topologyTriple topologyTripleList :
 
1408
                          ['$2' | '$3'] .
 
1409
 
 
1410
topologyDirection    -> 'BothwayToken' : bothway .
 
1411
topologyDirection    -> 'IsolateToken' : isolate .
 
1412
topologyDirection    -> 'OnewayToken'  : oneway .
 
1413
 
 
1414
priority             -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') .
 
1415
 
 
1416
extensionParameter   -> safeToken : ensure_extensionParameter('$1') .
 
1417
 
 
1418
value                -> 'QuotedChars' : ensure_value('$1') .
 
1419
value                -> safeToken     : ensure_value('$1').
 
1420
 
 
1421
safeToken            -> 'SafeChars'             : make_safe_token('$1') .
 
1422
%% BMK BMK safeToken            -> 'AddToken'              : make_safe_token('$1') .
 
1423
safeToken            -> 'AuditToken'            : make_safe_token('$1') .
 
1424
safeToken            -> 'AuditCapToken'         : make_safe_token('$1') .
 
1425
safeToken            -> 'AuditValueToken'       : make_safe_token('$1') .
 
1426
safeToken            -> 'AuthToken'             : make_safe_token('$1') .
 
1427
%% v3-safeToken            -> 'BothToken'             : make_safe_token('$1') . % v3
 
1428
safeToken            -> 'BothwayToken'          : make_safe_token('$1') .
 
1429
safeToken            -> 'BriefToken'            : make_safe_token('$1') .
 
1430
safeToken            -> 'BufferToken'           : make_safe_token('$1') .
 
1431
safeToken            -> 'CtxToken'              : make_safe_token('$1') .
 
1432
%% v3-safeToken            -> 'ContextAttrToken'      : make_safe_token('$1') . % v3
 
1433
safeToken            -> 'ContextAuditToken'     : make_safe_token('$1') .
 
1434
%% v2-safeToken            -> 'DigitMapToken'         : make_safe_token('$1') .
 
1435
%% safeToken         -> 'DigitMapDescriptorToken' : make_safe_token('$1') .
 
1436
%% v3-
 
1437
safeToken            -> 'DirectionToken'        : make_safe_token('$1') . % v3
 
1438
safeToken            -> 'DiscardToken'          : make_safe_token('$1') .
 
1439
safeToken            -> 'DisconnectedToken'     : make_safe_token('$1') .
 
1440
safeToken            -> 'DelayToken'            : make_safe_token('$1') .
 
1441
safeToken            -> 'DurationToken'         : make_safe_token('$1') .
 
1442
safeToken            -> 'EmbedToken'            : make_safe_token('$1') .
 
1443
%% BMK BMK safeToken            -> 'EmergencyToken'        : make_safe_token('$1') .
 
1444
%% BMK BMK safeToken            -> 'EmergencyOffToken'     : make_safe_token('$1') .
 
1445
safeToken            -> 'ErrorToken'            : make_safe_token('$1') .
 
1446
%% v2-safeToken            -> 'EventBufferToken'      : make_safe_token('$1') .
 
1447
%% v2-safeToken            -> 'EventsToken'           : make_safe_token('$1') .
 
1448
%% v3-safeToken            -> 'ExternalToken'         : make_safe_token('$1') . % v3
 
1449
safeToken            -> 'FailoverToken'         : make_safe_token('$1') .
 
1450
safeToken            -> 'ForcedToken'           : make_safe_token('$1') .
 
1451
safeToken            -> 'GracefulToken'         : make_safe_token('$1') .
 
1452
safeToken            -> 'H221Token'             : make_safe_token('$1') .
 
1453
safeToken            -> 'H223Token'             : make_safe_token('$1') .
 
1454
safeToken            -> 'H226Token'             : make_safe_token('$1') .
 
1455
safeToken            -> 'HandOffToken'          : make_safe_token('$1') .
 
1456
%% v3-safeToken            -> 'IEPSToken'             : make_safe_token('$1') . % v3
 
1457
safeToken            -> 'ImmAckRequiredToken'   : make_safe_token('$1') .
 
1458
safeToken            -> 'InactiveToken'         : make_safe_token('$1') .
 
1459
%% v3-safeToken            -> 'InternalToken'         : make_safe_token('$1') . % v3
 
1460
safeToken            -> 'InterruptByEventToken' : make_safe_token('$1') .
 
1461
safeToken            -> 'InterruptByNewSignalsDescrToken' : make_safe_token('$1') .
 
1462
safeToken            -> 'IsolateToken'          : make_safe_token('$1') .
 
1463
safeToken            -> 'InSvcToken'            : make_safe_token('$1') .
 
1464
safeToken            -> 'KeepActiveToken'       : make_safe_token('$1') .
 
1465
%% safeToken         -> 'LocalToken'            : make_safe_token('$1') .
 
1466
%% safeToken         -> 'LocalDescriptorToken'  : make_safe_token('$1') .
 
1467
safeToken            -> 'LocalControlToken'     : make_safe_token('$1') .
 
1468
safeToken            -> 'LoopbackToken'         : make_safe_token('$1') .
 
1469
safeToken            -> 'LockStepToken'         : make_safe_token('$1') .
 
1470
%% v2-safeToken            -> 'MediaToken'            : make_safe_token('$1') .
 
1471
%% safeToken         -> 'MegacopToken'          : make_safe_token('$1') .
 
1472
safeToken            -> 'MethodToken'           : make_safe_token('$1') .
 
1473
safeToken            -> 'MgcIdToken'            : make_safe_token('$1') .
 
1474
safeToken            -> 'ModeToken'             : make_safe_token('$1') .
 
1475
%% BMK BMK safeToken            -> 'ModifyToken'           : make_safe_token('$1') .
 
1476
%% v2-safeToken            -> 'ModemToken'            : make_safe_token('$1') .
 
1477
%% BMK BMK safeToken            -> 'MoveToken'             : make_safe_token('$1') .
 
1478
%% safeToken         -> 'MtpToken'              : make_safe_token('$1') .
 
1479
%% safeToken         -> 'MtpAddressToken'       : make_safe_token('$1') .
 
1480
%% v2-safeToken            -> 'MuxToken'              : make_safe_token('$1') .
 
1481
safeToken            -> 'NotifyToken'           : make_safe_token('$1') .
 
1482
safeToken            -> 'NotifyCompletionToken' : make_safe_token('$1') .
 
1483
safeToken            -> 'Nx64Token'             : make_safe_token('$1') .
 
1484
%% v2-safeToken            -> 'ObservedEventsToken'   : make_safe_token('$1') .
 
1485
safeToken            -> 'OnewayToken'           : make_safe_token('$1') .
 
1486
safeToken            -> 'OffToken'              : make_safe_token('$1') .
 
1487
safeToken            -> 'OnToken'               : make_safe_token('$1') .
 
1488
safeToken            -> 'OnOffToken'            : make_safe_token('$1') .
 
1489
safeToken            -> 'OutOfSvcToken'         : make_safe_token('$1') .
 
1490
safeToken            -> 'OtherReasonToken'      : make_safe_token('$1') .
 
1491
%% v2-safeToken            -> 'PackagesToken'         : make_safe_token('$1') .
 
1492
safeToken            -> 'PendingToken'          : make_safe_token('$1') .
 
1493
%% BMK BMK safeToken            -> 'PriorityToken'         : make_safe_token('$1') .
 
1494
safeToken            -> 'ProfileToken'          : make_safe_token('$1') .
 
1495
safeToken            -> 'ReasonToken'           : make_safe_token('$1') .
 
1496
safeToken            -> 'RecvonlyToken'         : make_safe_token('$1') .
 
1497
safeToken            -> 'ReplyToken'            : make_safe_token('$1') .
 
1498
%% v3-
 
1499
safeToken            -> 'RequestIDToken'        : make_safe_token('$1') . % v3
 
1500
safeToken            -> 'ResponseAckToken'      : make_safe_token('$1') .
 
1501
safeToken            -> 'RestartToken'          : make_safe_token('$1') .
 
1502
%% safeToken         -> 'RemoteToken'           : make_safe_token('$1') .
 
1503
%% safeToken         -> 'RemoteDescriptorToken' : make_safe_token('$1') .
 
1504
safeToken            -> 'ReservedGroupToken'    : make_safe_token('$1') .
 
1505
safeToken            -> 'ReservedValueToken'    : make_safe_token('$1') .
 
1506
safeToken            -> 'SendonlyToken'         : make_safe_token('$1') .
 
1507
safeToken            -> 'SendrecvToken'         : make_safe_token('$1') .
 
1508
safeToken            -> 'ServicesToken'         : make_safe_token('$1') .
 
1509
safeToken            -> 'ServiceStatesToken'    : make_safe_token('$1') .
 
1510
safeToken            -> 'ServiceChangeToken'    : make_safe_token('$1') .
 
1511
%% v3-safeToken            -> 'ServiceChangeIncompleteToken' : make_safe_token('$1') . % v3 
 
1512
safeToken            -> 'ServiceChangeAddressToken' : make_safe_token('$1') .
 
1513
safeToken            -> 'SignalListToken'       : make_safe_token('$1') .
 
1514
%% v2-safeToken            -> 'SignalsToken'          : make_safe_token('$1') .
 
1515
safeToken            -> 'SignalTypeToken'       : make_safe_token('$1') .
 
1516
%% v2-safeToken            -> 'StatsToken'            : make_safe_token('$1') .
 
1517
safeToken            -> 'StreamToken'           : make_safe_token('$1') .
 
1518
%% BMK BMK safeToken            -> 'SubtractToken'         : make_safe_token('$1') .
 
1519
safeToken            -> 'SynchISDNToken'        : make_safe_token('$1') .
 
1520
safeToken            -> 'TerminationStateToken' : make_safe_token('$1') .
 
1521
safeToken            -> 'TestToken'             : make_safe_token('$1') .
 
1522
safeToken            -> 'TimeOutToken'          : make_safe_token('$1') .
 
1523
%% BMK BMK safeToken            -> 'TopologyToken'         : make_safe_token('$1') .
 
1524
safeToken            -> 'TransToken'            : make_safe_token('$1') .
 
1525
safeToken            -> 'V18Token'              : make_safe_token('$1') .
 
1526
safeToken            -> 'V22Token'              : make_safe_token('$1') .
 
1527
safeToken            -> 'V22bisToken'           : make_safe_token('$1') .
 
1528
safeToken            -> 'V32Token'              : make_safe_token('$1') .
 
1529
safeToken            -> 'V32bisToken'           : make_safe_token('$1') .
 
1530
safeToken            -> 'V34Token'              : make_safe_token('$1') .
 
1531
safeToken            -> 'V76Token'              : make_safe_token('$1') .
 
1532
safeToken            -> 'V90Token'              : make_safe_token('$1') .
 
1533
safeToken            -> 'V91Token'              : make_safe_token('$1') .
 
1534
safeToken            -> 'VersionToken'          : make_safe_token('$1') .
 
1535
 
 
1536
Erlang code.
 
1537
 
 
1538
%% The following directive is needed for (significantly) faster compilation
 
1539
%% of the generated .erl file by the HiPE compiler.  Please do not remove.
 
1540
-compile([{hipe,[{regalloc,linear_scan}]}]).
 
1541
 
 
1542
-include("megaco_text_parser_prev3a.hrl").
 
1543
 
 
1544