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

« back to all changes in this revision

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