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/.
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
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.''
18
%%----------------------------------------------------------------------
19
%% Purpose: YECC grammar for text encoding of Megaco/H.248
20
%%----------------------------------------------------------------------
22
%%----------------------------------------------------------------------
23
%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
25
%% B.1 Coding of wildcards
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.
39
%% B.2 ABNF specification
41
%% The protocol syntax is presented in ABNF according to RFC2234. The
42
%% protocol is not case sensitive. Identifiers are not case sensitive.
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
54
%% Everything in the ABNF and text encoding is case insensitive. This
55
%% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as
58
%%----------------------------------------------------------------------
60
%%----------------------------------------------------------------------
61
%% Number of expected shift/reduce warnings
62
%% This is ugly but...
63
%%----------------------------------------------------------------------
68
%%----------------------------------------------------------------------
70
%%----------------------------------------------------------------------
100
auditReturnParameterList
101
auditSelectLogic %% v3
106
contextAttrDescriptor %% v3
108
contextAuditProperties
110
contextAuditSelector %% v3
114
%% contextProperties %% v3
116
%% contextPropertyList
117
contextTerminationAudit
133
eventBufferControlValue %% v3
134
eventBufferDescriptor
147
iaServiceStates %% v3
151
indAudauditReturnParameter
152
indAuddigitMapDescriptor
153
indAudeventBufferDescriptor
155
indAudeventSpecParameter
156
%% indAudeventSpecParameterList
157
indAudeventsDescriptor
158
indAudlocalControlDescriptor
161
indAudmediaDescriptor
163
indAudmediaParms %% v3
164
%% indAudmediaParmList
165
indAudpackagesDescriptor
167
indAudsignalsDescriptor
169
%% indAudsignalListParm
171
%% indAudsignalRequest
172
indAudstreamDescriptor
174
indAudstatisticsDescriptor
175
indAudterminationAudit
176
indAudterminationAuditList
177
indAudterminationStateDescriptor
178
indAudterminationStateParm
179
%% indAudterminationStateParmList
180
optIndAudeventSpecParameter
184
indAudcontextAttrDescriptor %% v3
186
localControlDescriptor
196
modemDescriptor % Deprecated as of Corr 1
197
modemType % Deprecated as of Corr 1
198
modemTypeList % Deprecated as of Corr 1
204
notifyBehaviour %% v3
205
notifyRegulated %% v3
212
observedEventParameter
213
observedEventParameters
214
% observedEventTimeStamp
216
observedEventsDescriptor
240
secondEventParameters
242
secondRequestedEventBody
243
secondRequestedEvents
248
serviceChangeDescriptor
256
serviceChangeReplyBody
257
serviceChangeReplyDescriptor
261
serviceStatesValue %% v3
287
terminationIDListRepeat
288
terminationStateDescriptor
290
terminationStateParms
305
transactionResponseAck
311
%%----------------------------------------------------------------------
313
%%----------------------------------------------------------------------
318
'AndAUDITselectToken' %% v3
329
'ContextAttrToken' %% v3
331
'ContextListToken' %% v3
335
'DigitMapDescriptorToken'
336
'DirectionToken' %% v3
344
'EmergencyValueToken' %% v3
348
'ExternalToken' %% v3
358
'ImmAckRequiredToken'
362
'InternalToken' %% v3
363
'InterruptByEventToken'
364
'InterruptByNewSignalsDescrToken'
365
'IntsigDelayToken' %% v3
367
'IterationToken' %% v3
373
'LocalDescriptorToken'
378
%% 'MessageSegmentToken'
388
'NeverNotifyToken' %% v3
389
'NotifyCompletionToken'
390
'NotifyImmediateToken' %% v3
391
'NotifyRegulatedToken' %% v3
394
'ObservedEventsToken'
399
'OnewayExternalToken' %% v3
400
'OnewayBothToken' %% v3
401
'OrAUDITselectToken' %% v3
413
'RemoteDescriptorToken'
415
'RequestIDToken' %% v3
418
'ResetEventsDescriptorToken' %% v3
423
%% 'SegmentationCompleteToken'
426
'ServiceChangeAddressToken'
428
'ServiceChangeIncompleteToken'
438
'TerminationStateToken'
458
%%----------------------------------------------------------------------
460
%%----------------------------------------------------------------------
462
Rootsymbol megacoMessage.
464
%%----------------------------------------------------------------------
466
%%----------------------------------------------------------------------
468
%% megacoMessage = LWSP [authenticationHeader SEP ] message
469
%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
470
%% SequenceNum COLON AuthData
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) .
478
megacoMessage -> optSep authenticationHeader message endOfMessage
479
: #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
481
optSep -> 'SEP' : sep .
482
optSep -> '$empty' : no_sep .
484
authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
485
safeToken 'COLON' safeToken optSep
486
: ensure_auth_header('$3', '$5', '$7') .
487
authenticationHeader -> '$empty' : asn1_NOVALUE .
489
message -> safeToken mId messageBody :
490
ensure_message('$1', '$2', '$3') .
492
messageBody -> errorDescriptor : {messageError, '$1'} .
493
messageBody -> transactionList : {transactions, '$1'} .
495
transactionList -> transactionItem : ['$1'] .
496
transactionList -> transactionItem transactionList : ['$1' | '$2'] .
498
transactionItem -> transactionRequest : {transactionRequest, '$1'} .
499
transactionItem -> transactionReply : {transactionReply, '$1'}.
500
transactionItem -> transactionPending : {transactionPending, '$1'} .
501
transactionItem -> transactionResponseAck : {transactionResponseAck, '$1'} .
503
transactionResponseAck -> 'ResponseAckToken'
504
'LBRKT' transactionAck
505
transactionAckList 'RBRKT' : ['$3' | '$4'] .
507
transactionAckList -> 'COMMA' transactionAck
508
transactionAckList : ['$2' | '$3'] .
509
transactionAckList -> '$empty' : [] .
511
transactionAck -> safeToken : ensure_transactionAck('$1') .
513
transactionPending -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT' :
514
#'TransactionPending'{transactionId = ensure_transactionID('$3') } .
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']} .
529
actionRequestList -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] .
530
actionRequestList -> '$empty' : [] .
532
%% actionRequest = CtxToken EQUAL ContextID LBRKT ((contextRequest
533
%% [COMMA commandRequestList]) /
534
%% commandRequestList) RBRKT
535
%% contextRequest = ((contextProperties [COMMA contextAudit]) /
537
%% contextProperties = contextProperty *(COMMA contextProperty)
539
actionRequest -> 'CtxToken' 'EQUAL' contextID
540
'LBRKT' actionRequestBody 'RBRKT' :
541
merge_action_request('$3', '$5') .
543
actionRequestBody -> actionRequestItem actionRequestItems : ['$1' | '$2'] .
545
actionRequestItems -> 'COMMA' actionRequestItem
546
actionRequestItems : ['$2' | '$3'] .
547
actionRequestItems -> '$empty' : [] .
549
actionRequestItem -> contextProperty : {contextProp, '$1'} .
550
actionRequestItem -> contextAudit : {contextAudit, '$1'} .
551
actionRequestItem -> commandRequest : {commandRequest, '$1'} .
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' .
562
contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' propertyParms 'RBRKT' :
564
contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' contextIdList 'RBRKT' :
567
contextIdList -> 'ContextListToken' 'EQUAL'
568
'LBRKT' contextID contextIDs 'RBRKT' : ['$4' | '$5'] .
570
contextIDs -> 'COMMA' contextID contextIDs : ['$2' | '$3'] .
571
contextIDs -> '$empty' : [] .
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']) .
582
indAudcontextAttrDescriptor -> 'ContextAttrToken'
583
'LBRKT' contextAuditProperty
584
contextAuditProperties 'RBRKT'
587
contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties
589
contextAuditProperties -> '$empty' : [] .
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' .
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' .
606
auditSelectLogic -> 'AndAUDITselectToken' : {andAUDITSelect, 'NULL'} .
607
auditSelectLogic -> 'OrAUDITselectToken' : {orAUDITSelect, 'NULL'} .
609
commandRequest -> ammRequest : '$1'.
610
commandRequest -> subtractRequest : '$1'.
611
commandRequest -> auditRequest : '$1'.
612
commandRequest -> notifyRequest : '$1'.
613
commandRequest -> serviceChangeRequest : '$1'.
615
transactionReply -> 'ReplyToken' 'EQUAL' transactionID
617
optImmAckRequired transactionReplyBody
619
: #'TransactionReply'{transactionId = '$3',
620
immAckRequired = '$5',
621
transactionResult = '$6'} .
623
optImmAckRequired -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' .
624
optImmAckRequired -> '$empty' : asn1_NOVALUE .
626
transactionReplyBody -> errorDescriptor : {transactionError, '$1'} .
627
transactionReplyBody -> actionReply actionReplyList : {actionReplies, ['$1' | '$2']} .
629
actionReplyList -> 'COMMA' actionReply actionReplyList : ['$2' | '$3'] .
630
actionReplyList -> '$empty' : [] .
632
actionReply -> 'CtxToken' 'EQUAL' contextID
633
'LBRKT' actionReplyBody 'RBRKT' :
634
setelement(#'ActionReply'.contextId, '$5', '$3') .
635
actionReply -> 'CtxToken' 'EQUAL' contextID :
636
#'ActionReply'{contextId = '$3'} .
638
actionReplyBody -> errorDescriptor :
639
#'ActionReply'{errorDescriptor = '$1'} .
640
actionReplyBody -> commandReplys commandReplyList :
641
merge_action_reply(['$1' | '$2']) .
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 :
649
commandReplyList -> 'COMMA' commandReplys commandReplyList :
651
commandReplyList -> '$empty' : [] .
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'} .
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}) .
666
ammToken -> 'AddToken' : {addReq, '$1'} .
667
ammToken -> 'MoveToken' : {moveReq, '$1'} .
668
ammToken -> 'ModifyToken' : {modReq, '$1'} .
670
ammRequestBody -> 'LBRKT' ammParameter ammParameters 'RBRKT' : ['$2' | '$3'] .
671
ammRequestBody -> '$empty' : [] .
673
ammParameters -> 'COMMA' ammParameter ammParameters : ['$2' | '$3'] .
674
ammParameters -> '$empty' : [] .
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'}.
687
ammsReply -> ammsToken 'EQUAL' termIDList ammsReplyBody
688
: {'$1', #'AmmsReply'{terminationID = '$3',
689
terminationAudit = '$4'}} .
691
ammsToken -> 'AddToken' : addReply .
692
ammsToken -> 'MoveToken' : moveReply .
693
ammsToken -> 'ModifyToken' : modReply .
694
ammsToken -> 'SubtractToken' : subtractReply .
696
ammsReplyBody -> 'LBRKT' terminationAudit 'RBRKT' : '$2' .
697
ammsReplyBody -> '$empty' : asn1_NOVALUE .
699
subtractRequest -> 'SubtractToken' 'EQUAL' termIDList optAuditDescriptor :
700
SR = #'SubtractRequest'{terminationID = '$3',
701
auditDescriptor = '$4'},
702
make_commandRequest({subtractReq, '$1'}, SR) .
705
optAuditDescriptor -> 'LBRKT' auditDescriptor 'RBRKT' : '$2'.
706
optAuditDescriptor -> '$empty' : asn1_NOVALUE .
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')) .
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'} .
724
contextTerminationAudit -> terminationIDList :
725
{contextAuditResult, '$1'} .
726
contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' :
729
auditOther -> termIDList :
730
merge_auditOther('$1', []) .
731
auditOther -> termIDList 'LBRKT' terminationAudit 'RBRKT' :
732
merge_auditOther('$1', '$3') .
735
terminationAudit -> auditReturnParameter auditReturnParameterList :
736
merge_terminationAudit(['$1' |'$2' ]) .
738
auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] .
739
auditReturnParameterList -> '$empty' : [] .
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'} .
754
auditDescriptor -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' :
755
merge_auditDescriptor('$3') .
757
auditDescriptorBody -> auditItem auditItemList : ['$1' | '$2'].
758
auditDescriptorBody -> '$empty' : asn1_NOVALUE .
760
auditItemList -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] .
761
auditItemList -> '$empty' : [] .
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 .
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
786
indAudterminationAudit -> indAudauditReturnParameter
787
indAudterminationAuditList
790
indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter
791
indAudterminationAuditList
793
indAudterminationAuditList -> '$empty' : [] .
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'} .
811
indAudmediaDescriptor -> 'MediaToken' 'LBRKT'
812
indAudmediaParm indAudmediaParms 'RBRKT'
813
: merge_indAudMediaDescriptor(['$3'|'$4']) .
815
%% at-most-once per item
816
%% and either streamParm or streamDescriptor but not both
819
indAudmediaParm -> indAudstreamParm : {streamParm, '$1'} .
820
indAudmediaParm -> indAudstreamDescriptor : {streamDescr, '$1'} .
821
indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} .
823
indAudmediaParms -> 'COMMA' indAudmediaParm indAudmediaParms : ['$2' | '$3'] .
824
indAudmediaParms -> '$empty' : [] .
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'} .
838
indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID
839
'LBRKT' indAudstreamParm 'RBRKT'
840
: #'IndAudStreamDescriptor'{streamID = '$3',
841
streamParms = '$5'} .
844
indAudlocalControlDescriptor -> 'LocalControlToken'
845
'LBRKT' indAudlocalParm
846
indAudlocalParmList 'RBRKT' :
847
merge_indAudLocalControlDescriptor(['$3' | '$4']) .
849
indAudlocalParmList -> 'COMMA' indAudlocalParm
850
indAudlocalParmList : ['$2' | '$3'] .
851
indAudlocalParmList -> '$empty' : [] .
853
%% at-most-once per item
855
%% propertyparm and streamModes are used only to specify audit selection
856
%% criteria. AND/OR selection logic is specified at context level.
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'} .
866
indAudterminationStateDescriptor -> 'TerminationStateToken'
867
'LBRKT' indAudterminationStateParm 'RBRKT'
869
merge_indAudTerminationStateDescriptor('$3') .
871
%% at-most-once per item
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'} .
880
iaServiceStates -> 'ServiceStatesToken' :
882
iaServiceStates -> 'ServiceStatesToken' 'EQUAL' serviceStatesValue :
883
{serviceStates, {equal, '$3'}} .
884
iaServiceStates -> 'ServiceStatesToken' 'INEQUAL' serviceStatesValue :
885
{serviceStates, {inequal, '$3'}} .
887
indAudeventBufferDescriptor -> 'EventBufferToken'
888
'LBRKT' indAudeventSpec 'RBRKT' : '$3' .
890
indAudeventSpec -> pkgdName optIndAudeventSpecParameter
891
: merge_indAudEventBufferDescriptor('$1','$2') .
893
optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT'
895
optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE .
898
indAudeventSpecParameter -> eventStream : {streamID, '$1'} .
899
indAudeventSpecParameter -> eventParameterName : {eventParameterName, '$1'} .
901
indAudeventsDescriptor -> 'EventsToken' 'LBRKT' indAudrequestedEvent 'RBRKT' :
902
#'IndAudEventsDescriptor'{pkgdName = '$3'} .
903
indAudeventsDescriptor -> 'EventsToken' 'EQUAL' requestID
904
'LBRKT' indAudrequestedEvent 'RBRKT' :
905
#'IndAudEventsDescriptor'{requestID = '$3',
908
indAudrequestedEvent -> pkgdName : '$1' .
911
indAudsignalsDescriptor -> 'SignalsToken' optIndAudsignalParm : '$2' .
914
optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE .
915
optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT' : '$2' .
917
indAudsignalParm -> indAudsignalList : {seqSigList, '$1'} .
918
indAudsignalParm -> signalRequest : {signal, ensure_indAudSignal('$1')} .
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'),
926
ensure_indAudSignalListParm('$5')} .
929
%% The DigitMapDescriptorToken is specially treated by the scanner
930
indAuddigitMapDescriptor -> 'DigitMapDescriptorToken' :
933
indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' :
934
#'IndAudStatisticsDescriptor'{statName = '$3'} .
936
indAudpackagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT'
937
: merge_indAudPackagesDescriptor('$3') .
939
eventStream -> 'StreamToken' 'EQUAL' streamID : '$3' .
945
notifyRequest -> 'NotifyToken' 'EQUAL' termIDList
946
'LBRKT' notifyRequestBody 'RBRKT' :
947
NR = setelement(#'NotifyRequest'.terminationID,
949
make_commandRequest({notifyReq, '$1'}, NR) .
951
notifyRequestBody -> observedEventsDescriptor :
952
#'NotifyRequest'{observedEventsDescriptor = '$1'}.
953
notifyRequestBody -> errorDescriptor :
954
#'NotifyRequest'{errorDescriptor = '$1'}.
956
notifyReply -> 'NotifyToken' 'EQUAL' termIDList notifyReplyBody :
957
{notifyReply, #'NotifyReply'{terminationID = '$3',
958
errorDescriptor = '$4'}} .
960
notifyReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'.
961
notifyReplyBody -> '$empty' : asn1_NOVALUE .
963
serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' termIDList
964
'LBRKT' serviceChangeDescriptor 'RBRKT' :
965
make_commandRequest({serviceChangeReq, '$1'},
966
#'ServiceChangeRequest'{terminationID = '$3',
967
serviceChangeParms = '$5'}) .
969
serviceChangeReply -> 'ServiceChangeToken' 'EQUAL' termIDList
970
serviceChangeReplyBody :
972
#'ServiceChangeReply'{terminationID = '$3',
973
serviceChangeResult = '$4'}} .
975
serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' :
976
{errorDescriptor, '$2'} .
977
serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT' :
978
{serviceChangeResParms, '$2'} .
979
serviceChangeReplyBody -> '$empty' :
980
{serviceChangeResParms, #'ServiceChangeResParm'{}}.
982
errorDescriptor -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT'
984
#'ErrorDescriptor'{errorCode = '$3',
987
errorCode -> safeToken : ensure_uint('$1', 0, 999) .
989
errorText -> 'QuotedChars' : value_of('$1') .
990
errorText -> '$empty' : asn1_NOVALUE .
992
transactionID -> safeToken : ensure_uint32('$1') .
994
mId -> domainName : '$1' .
995
mId -> domainAddress : '$1' .
996
mId -> optSep mtpAddress optSep : '$2' .
997
mId -> optSep deviceName optSep : '$2' .
999
domainName -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
1000
: ensure_domainName('$2', '$5') .
1001
domainName -> 'LESSER' safeToken 'GREATER'
1002
: ensure_domainName('$2', asn1_NOVALUE) .
1004
deviceName -> pathName : {deviceName, '$1'} .
1006
%% '-' is used for NULL context
1007
contextID -> safeToken : ensure_contextID('$1') .
1009
domainAddress -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
1010
: ensure_domainAddress('$2', '$5') .
1011
domainAddress -> 'LSBRKT' daddr 'RSBRKT'
1012
: ensure_domainAddress('$2', asn1_NOVALUE) .
1014
daddr -> '$empty' : [] .
1015
daddr -> 'COLON' daddr : [colon| '$2'] .
1016
daddr -> safeToken daddr : ['$1'| '$2'] .
1019
portNumber -> safeToken : ensure_uint16('$1') .
1021
mtpAddress -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
1023
termIDList -> terminationID : ['$1'] .
1024
termIDList -> LSBRKT terminationID terminationIDListRepeat RSBRKT :
1027
terminationIDList -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT' :
1030
terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat :
1032
terminationIDListRepeat -> '$empty' : [] .
1035
pathName -> safeToken : ensure_pathName('$1') .
1037
terminationID -> safeToken : ensure_terminationID('$1') .
1039
mediaDescriptor -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT'
1040
: merge_mediaDescriptor(['$3' | '$4']) .
1042
mediaParmList -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] .
1043
mediaParmList -> '$empty' : [] .
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'} .
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'} .
1064
streamDescriptor -> 'StreamToken' 'EQUAL' streamID
1065
'LBRKT' streamParm streamParmList 'RBRKT'
1066
: #'StreamDescriptor'{streamID = '$3',
1067
streamParms = merge_streamParms(['$5' | '$6'])} .
1069
streamParmList -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] .
1070
streamParmList -> '$empty' : [] .
1072
localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT'
1075
localParmList -> 'COMMA' localParm localParmList : ['$2' | '$3'] .
1076
localParmList -> '$empty': [] .
1078
terminationStateDescriptor -> 'TerminationStateToken'
1079
'LBRKT' terminationStateParm
1080
terminationStateParms 'RBRKT'
1081
: merge_terminationStateDescriptor(['$3' | '$4']) .
1083
terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] .
1084
terminationStateParms -> '$empty' : [] .
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'} .
1092
onOrOff -> 'OnToken' : true .
1093
onOrOff -> 'OffToken' : false .
1096
streamModes -> 'SendonlyToken' : sendOnly .
1097
streamModes -> 'RecvonlyToken' : recvOnly .
1098
streamModes -> 'SendrecvToken' : sendRecv .
1099
streamModes -> 'InactiveToken' : inactive .
1100
streamModes -> 'LoopbackToken' : loopBack .
1102
propertyParm -> pkgdName parmValue :
1103
setelement(#'PropertyParm'.name, '$2', '$1') .
1105
parmValue -> 'EQUAL' alternativeValue :
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}} .
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
1127
alternativeValue -> 'LSBRKT' value 'COLON' value 'RSBRKT'
1128
: #'PropertyParm'{value = ['$2', '$4'],
1129
extraInfo = {range, true}}.
1131
alternativeValue -> 'LSBRKT' value valueList 'RSBRKT'
1132
: #'PropertyParm'{value = ['$2' | '$3'],
1133
extraInfo = {sublist, true}}. % AND
1135
alternativeValue -> value :
1136
#'PropertyParm'{value = ['$1']} .
1138
valueList -> 'COMMA' value valueList : ['$2' | '$3'] .
1139
valueList -> '$empty' : [] .
1142
eventBufferDescriptor -> 'EventBufferToken' : [] .
1143
eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec
1144
eventSpecList 'RBRKT' :
1147
eventSpecList -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] .
1148
eventSpecList -> '$empty' : [] .
1150
eventSpec -> observedEvent : merge_eventSpec('$1') .
1152
%% at-most-once per item except for propertyParm
1153
terminationStateParm -> serviceStates : {serviceState, '$1'} .
1154
terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} .
1155
terminationStateParm -> propertyParm : {propertyParm, '$1'} .
1157
serviceStates -> 'ServiceStatesToken' 'EQUAL' serviceStatesValue : '$3'.
1159
serviceStatesValue -> 'TestToken' : test .
1160
serviceStatesValue -> 'OutOfSvcToken' : outOfSvc .
1161
serviceStatesValue -> 'InSvcToken' : inSvc .
1163
eventBufferControl -> 'BufferToken' 'EQUAL' eventBufferControlValue : '$3' .
1165
eventBufferControlValue -> 'OffToken' : off .
1166
eventBufferControlValue -> 'LockStepToken' : lockStep .
1168
muxDescriptor -> 'MuxToken' 'EQUAL' muxType terminationIDList :
1169
#'MuxDescriptor'{muxType = '$3',
1172
muxType -> safeToken : ensure_muxType('$1') .
1174
streamID -> safeToken : ensure_streamID('$1') .
1176
pkgdName -> safeToken : ensure_pkgdName('$1') .
1178
eventsDescriptor -> 'EventsToken' :
1179
#'EventsDescriptor'{requestID = asn1_NOVALUE,
1181
eventsDescriptor -> 'EventsToken' 'EQUAL' requestID
1182
'LBRKT' requestedEvent requestedEvents 'RBRKT' :
1183
#'EventsDescriptor'{requestID = '$3',
1184
eventList = ['$5' | '$6']} .
1186
requestedEvents -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3'] .
1187
requestedEvents -> '$empty' : [] .
1189
requestedEvent -> pkgdName requestedEventBody :
1190
setelement(#'RequestedEvent'.pkgdName, '$2', '$1') .
1192
requestedEventBody -> 'LBRKT' eventParameter eventParameters 'RBRKT' :
1193
merge_eventParameters(['$2' | '$3']) .
1194
requestedEventBody -> '$empty' : #'RequestedEvent'{evParList = []} .
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') .
1204
notifyBehaviour -> 'NotifyImmediateToken' : {notifyImmediate, 'NULL'} .
1205
notifyBehaviour -> 'NeverNotifyToken' : {neverNotify, 'NULL'} .
1206
notifyBehaviour -> notifyRegulated : {notifyRegulated, '$1'} .
1208
eventParameters -> 'COMMA' eventParameter eventParameters :
1210
eventParameters -> '$empty' : [] .
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 .
1221
embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor
1222
'COMMA' embedFirst 'RBRKT'
1223
: {embed, '$3', '$5'} .
1224
embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
1225
: {embed, '$3', asn1_NOVALUE} .
1227
embedNoSig -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT'
1228
: {embed, asn1_NOVALUE, '$3'} .
1230
embedFirst -> 'EventsToken' :
1231
#'SecondEventsDescriptor'{requestID = asn1_NOVALUE,
1233
embedFirst -> 'EventsToken' 'EQUAL' requestID
1234
'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' :
1235
#'SecondEventsDescriptor'{requestID = '$3',
1236
eventList = ['$5' | '$6']} .
1238
secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] .
1239
secondRequestedEvents -> '$empty' : [] .
1241
%% at-most-once of each
1242
secondRequestedEvent -> pkgdName secondRequestedEventBody
1243
: setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') .
1245
secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT'
1246
: merge_secondEventParameters(['$2' | '$3']) .
1247
secondRequestedEventBody -> '$empty' : #'SecondRequestedEvent'{evParList = []} .
1249
secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] .
1250
secondEventParameters -> '$empty' : [] .
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 .
1260
embedSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
1261
: {second_embed, '$3'} .
1263
eventStreamOrOther -> eventParameterName parmValue :
1264
select_stream_or_other('$1', '$2') .
1266
eventParameterName -> safeToken : ensure_NAME('$1') .
1268
%% The DigitMapDescriptorToken is specially treated by the scanner
1269
eventDM -> 'DigitMapDescriptorToken' :
1270
ensure_eventDM('$1') .
1273
signalsDescriptor -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' :
1275
signalsDescriptor -> 'SignalsToken' : [] .
1277
signalParms -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] .
1278
signalParms -> '$empty' : [] .
1280
signalParm -> signalList : {seqSigList, '$1'} .
1281
signalParm -> signalRequest : {signal, '$1'} .
1283
signalRequest -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT'
1284
: merge_signalRequest('$1', ['$3' | '$4']).
1285
signalRequest -> signalName : merge_signalRequest('$1', []).
1287
sigParameters -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] .
1288
sigParameters -> '$empty' : [] .
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)
1303
%% notificationReason = ( TimeOutToken / InterruptByEventToken /
1304
%% InterruptByNewSignalsDescrToken /
1305
%% OtherReasonToken )
1306
%% sigDirection = DirectionToken EQUAL direction
1307
%% sigRequestID = RequestIDToken EQUAL RequestID
1308
%% sigIntsigDelay = IntsigDelayToken EQUAL UINT16
1310
sigParameter -> 'StreamToken' 'EQUAL' streamID :
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 :
1322
sigParameter -> 'RequestIDToken' 'EQUAL' requestID :
1324
sigParameter -> 'IntsigDelayToken' 'EQUAL' safeToken :
1325
{intersigDelay, ensure_uint16('$3')} .
1326
sigParameter -> safeToken parmValue :
1327
{other, ensure_NAME('$1'), '$2'}.
1329
signalType -> 'OnOffToken' : onOff.
1330
signalType -> 'TimeOutToken' : timeOut.
1331
signalType -> 'BriefToken' : brief.
1333
direction -> 'ExternalToken' : external .
1334
direction -> 'InternalToken' : internal .
1335
direction -> 'BothToken' : both .
1337
notificationReasons -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] .
1338
notificationReasons -> '$empty' : [] .
1340
notificationReason -> 'TimeOutToken' : onTimeOut .
1341
notificationReason -> 'InterruptByEventToken' : onInterruptByEvent .
1342
notificationReason -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr .
1343
notificationReason -> 'OtherReasonToken' : otherReason .
1344
notificationReason -> 'IterationToken' : iteration .
1346
signalList -> 'SignalListToken' 'EQUAL' signalListId
1347
'LBRKT' signalListParm signalListParms 'RBRKT'
1348
: #'SeqSigList'{id = ensure_uint16('$3'),
1349
signalList = ['$5' | '$6']} .
1351
signalListParms -> 'COMMA' signalListParm signalListParms :
1353
signalListParms -> '$empty' : [] .
1355
signalListId -> safeToken : ensure_uint16('$1') .
1357
%% exactly once signalType,
1358
%% at most once duration and every signal parameter
1359
signalListParm -> signalRequest : '$1'.
1361
signalName -> pkgdName : '$1'.
1363
observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID
1364
'LBRKT' observedEvent observedEvents 'RBRKT'
1365
: #'ObservedEventsDescriptor'{requestId = '$3',
1366
observedEventLst = ['$5' | '$6']} .
1368
observedEvents -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] .
1369
observedEvents -> '$empty' : [] .
1371
%%time per event, because it might be buffered
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) .
1378
observedEventBody -> 'LBRKT' observedEventParameter
1379
observedEventParameters 'RBRKT'
1381
observedEventBody -> '$empty' : [] .
1383
observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] .
1384
observedEventParameters -> '$empty' : [] .
1386
%%at-most-once eventStream, every eventParameterName at most once
1387
observedEventParameter -> eventStreamOrOther : '$1' .
1389
requestID -> safeToken : ensure_requestID('$1') .
1391
%% Deprecated as of Corr 1
1392
modemDescriptor -> 'ModemToken' 'EQUAL' modemType optPropertyParms .
1393
modemDescriptor -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT'
1395
modemTypeList -> 'COMMA' modemType modemTypeList.
1396
modemTypeList -> '$empty'.
1397
modemType -> safeToken.
1399
optPropertyParms -> 'LBRKT' propertyParm propertyParmList 'RBRKT' :
1401
optPropertyParms -> '$empty' : [] .
1403
propertyParms -> propertyParm propertyParmList : ['$1' | '$2'] .
1404
propertyParmList -> 'COMMA' propertyParm propertyParmList : ['$2' | '$3'] .
1405
propertyParmList -> '$empty' : [] .
1407
% parmName -> safeToken : ensure_NAME('$1') .
1409
%% The DigitMapDescriptorToken is specially treated by the scanner
1410
digitMapDescriptor -> 'DigitMapDescriptorToken' :
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']) .
1421
serviceChangeParms -> 'COMMA' serviceChangeParm serviceChangeParms :
1423
serviceChangeParms -> '$empty' : [] .
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
1437
serviceChangeMethod -> 'MethodToken' 'EQUAL' safeToken :
1438
ensure_serviceChangeMethod('$3') .
1440
serviceChangeReason -> 'ReasonToken' 'EQUAL' value : ['$3'] .
1442
serviceChangeDelay -> 'DelayToken' 'EQUAL' safeToken : ensure_uint32('$3').
1444
serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' .
1445
serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber :
1446
{portNumber, '$3'} .
1448
serviceChangeMgcId -> 'MgcIdToken' 'EQUAL' mId : '$3' .
1450
serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3').
1452
serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') .
1454
extension -> extensionParameter parmValue
1455
: setelement(#'PropertyParm'.name, '$2', '$1') .
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']) .
1464
servChgReplyParms -> 'COMMA' servChgReplyParm servChgReplyParms :
1466
servChgReplyParms -> '$empty' : [] .
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'} .
1474
packagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem
1475
packagesItems 'RBRKT'
1478
packagesItems -> 'COMMA' packagesItem packagesItems : ['$2' | '$3'] .
1479
packagesItems -> '$empty' : [] .
1481
packagesItem -> safeToken : ensure_packagesItem('$1') .
1483
timeStamp -> TimeStampToken : ensure_timeStamp('$1') .
1485
statisticsDescriptor -> 'StatsToken'
1486
'LBRKT' statisticsParameter
1487
statisticsParameters 'RBRKT'
1490
statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters : ['$2' | '$3'] .
1491
statisticsParameters -> '$empty' : [] .
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']} .
1505
topologyDescriptor -> 'TopologyToken' 'LBRKT'
1506
topologyDescComp topologyDescCompList 'RBRKT' :
1507
merge_topologyDescriptor(['$3' | '$4']) .
1509
topologyDescComp -> terminationID : {tid, '$1'} .
1510
topologyDescComp -> eventStream : {sid, '$1'} .
1511
topologyDescComp -> topologyDirection : '$1' .
1513
topologyDescCompList -> '$empty' : [] .
1514
topologyDescCompList -> 'COMMA' topologyDescComp topologyDescCompList :
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} .
1523
iepsValue -> 'IEPSToken' 'EQUAL' onOrOff : '$3' .
1525
emergencyValue -> 'EmergencyValueToken' 'EQUAL' 'EmergencyToken' : true .
1526
emergencyValue -> 'EmergencyValueToken' 'EQUAL' 'EmergencyOffToken' : false .
1528
priority -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') .
1530
extensionParameter -> safeToken : ensure_extensionParameter('$1') .
1532
value -> 'QuotedChars' : ensure_value('$1') .
1533
value -> safeToken : ensure_value('$1').
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') .
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') .
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') .
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}]}]).
1659
-include("megaco_text_parser_prev3c.hrl").