FormalADL / kAADL

1 stars 1 forks source link

Error02:Update error about “krun --backend java *.aadl“ #7

Closed suweining closed 9 years ago

suweining commented 10 years ago

1) SubCmp, SubPgmCall

in SubprogramsAndSubprogramCalls.aadl

2) ProtoType, SubCmp

in ComponentTypes.aadl

3) ConstantPpeExpression, ArrayElementImplList, DefaultPpeExpression, UnitsList, PpeListValue

in Devices.aadl Ports.aadl PropertyDefinitions.aadl PropertyTypes.aadl

4) ConnectIdSubcompenentFlowIdnetifierList, ConnectionSubcompenentFlowAssocDef, ConnectionIdFlowPathList

in EndToEndFlows.aadl FlowImplementations.aadl

5) FetGroupTypeProtoTypeActual, FetGroupTypeProtoType, FetGroupSpecAssocDef

in FeatureGroupConnections.aadl

6) FetGroupTypeAssocDefElem, FetGroupTypeExtAssocDefElem, InverseOfUniProtoType

in FeatureGroupsAndFeatureGroupTypes.aadl

7) InModes, CmpInModes, InModesAndTransitions

in ModesAndModeTransitions.aadl

8) IntegerRange, IntegerRangeTerm

in PropertyExpressions.aadl

9) RefType, RefTerm

in SystemBinding.aadl

10) ClassifierType, CmpClassifierTerm

in VirtualBuses.aadl

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 1) //////////////////////////////////////////////////////// SubCmp, SubPgmCall

syntax SubCmp ::= Id Mcolon CmpCategory SubCmpAssocDef MSemicolon | Id Mcolon CmpCategory MSemicolon syntax CmpCategory ::= AbstractCmpCategory | SoftwareCategory | ExecPlateformCategory | CompositeCategory syntax SoftwareCategory ::= Mdata | Msubprogram | Msubprogram Mgroup | Mthread | Mthread Mgroup | Mprocess syntax SubCmpAssocDef ::= SubCmpAssocDefElem | SubCmpAssocDefElem SubCmpAssocDef syntax SubCmpAssocDefElem ::= UniCmpClassifierRef | UniCmpClassifierRef ProtoTypeBindings | Id | ArrayDimension | ArrayDimensions ArrayElementImplList | MBraceLeft PpeContainedPpeAssocList MBraceRight | CmpInModes

syntax SubPgmCall ::= Id Mcolon Msubprogram CalledSubPgm MSemicolon syntax CalledSubPgm ::= AmbIdPointId | AmbProcessorPointId

The same :Id Mcolon Msubprogram Id MSemicolon

/////////////////////////////////////////////// Solution //////////////////////////////////////////////////////// step1) syntax AmbIdColonSubprogramIdSemicolon ::= Id Mcolon Msubprogram Id MSemicolon

step2) syntax SubCmp ::= Id Mcolon CmpCategory MSemicolon | Id Mcolon AbstractCmpCategory SubCmpAssocDef MSemicolon | Id Mcolon ExecPlateformCategory SubCmpAssocDef MSemicolon | Id Mcolon CompositeCategory SubCmpAssocDef MSemicolon | Id Mcolon Mdata SubCmpAssocDef MSemicolon | Id Mcolon Msubprogram Mgroup SubCmpAssocDef MSemicolon | Id Mcolon Mthread SubCmpAssocDef MSemicolon | Id Mcolon Mthread Mgroup SubCmpAssocDef MSemicolon | Id Mcolon Mprocess SubCmpAssocDef MSemicolon | Id Mcolon Msubprogram SubCmpAssocDefElem SubCmpAssocDef MSemicolon | Id Mcolon Msubprogram UniCmpClassifierRef MSemicolon | Id Mcolon Msubprogram UniCmpClassifierRef ProtoTypeBindings MSemicolon | Id Mcolon Msubprogram ArrayDimension MSemicolon | Id Mcolon Msubprogram ArrayDimensions ArrayElementImplList MSemicolon | Id Mcolon Msubprogram MBraceLeft PpeContainedPpeAssocList MBraceRight MSemicolon | Id Mcolon Msubprogram CmpInModes MSemicolon | AmbIdColonSubprogramIdSemicolon

step3) syntax SubPgmCall ::= Id Mcolon Msubprogram AmbProcessorPointId MSemicolon | Id Mcolon Msubprogram Id MPoint Id MSemicolon | AmbIdColonSubprogramIdSemicolon

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 2) ////////////////////////////////////////////////////////

ProtoType, SubCmp syntax ProtoType ::= Id Mcolon ProtoTypeDef MSemicolon | Id Mcolon ProtoTypeDef MBraceLeft ProtoTypePpeAssocList MBraceRight MSemicolon syntax ProtoTypeDef ::= CmpProtoType | FetGroupTypeProtoType | FetProtoType
syntax CmpProtoType ::= CmpCategory | CmpCategory MDoubleBracket | CmpCategory UniCmpClassifierRef | CmpCategory UniCmpClassifierRef MDoubleBracket

syntax SubCmp ::= Id Mcolon CmpCategory MSemicolon | Id Mcolon AbstractCmpCategory SubCmpAssocDef MSemicolon | Id Mcolon ExecPlateformCategory SubCmpAssocDef MSemicolon | Id Mcolon CompositeCategory SubCmpAssocDef MSemicolon | Id Mcolon Mdata SubCmpAssocDef MSemicolon | Id Mcolon Msubprogram Mgroup SubCmpAssocDef MSemicolon | Id Mcolon Mthread SubCmpAssocDef MSemicolon | Id Mcolon Mthread Mgroup SubCmpAssocDef MSemicolon | Id Mcolon Mprocess SubCmpAssocDef MSemicolon | Id Mcolon Msubprogram SubCmpAssocDefElem SubCmpAssocDef MSemicolon | Id Mcolon Msubprogram UniCmpClassifierRef MSemicolon | Id Mcolon Msubprogram UniCmpClassifierRef ProtoTypeBindings MSemicolon | Id Mcolon Msubprogram ArrayDimension MSemicolon | Id Mcolon Msubprogram ArrayDimensions ArrayElementImplList MSemicolon | Id Mcolon Msubprogram MBraceLeft PpeContainedPpeAssocList MBraceRight MSemicolon | Id Mcolon Msubprogram CmpInModes MSemicolon | AmbIdColonSubprogramIdSemicolon

The same : Id Mcolon CmpCategory MSemicolon

//////////////////////////////////// Solution ////////////////////////////////////

step1) syntax AmbIdColonCmpCategorySemicolon ::= Id Mcolon CmpCategory MSemicolon [ here need unfold CmpCategory ]

step2) syntax ProtoType ::= Id Mcolon ProtoTypeDef MBraceLeft ProtoTypePpeAssocList MBraceRight MSemicolon | Id Mcolon FetGroupTypeProtoType MSemicolon | Id Mcolon FetProtoType MSemicolon
| Id Mcolon CmpCategory MDoubleBracket MSemicolon | Id Mcolon CmpCategory UniCmpClassifierRef MSemicolon | Id Mcolon CmpCategory UniCmpClassifierRef MDoubleBracket MSemicolon | AmbIdColonCmpCategorySemicolon step3) syntax SubCmp ::= Id Mcolon CmpCategory SubCmpAssocDef MSemicolon | AmbIdColonCmpCategorySemicolon

If appear ambiguity of AmbIdColonCmpCategorySemicolon then we unfold the CmpCategory.

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 3) ////////////////////////////////////////////////////////

ConstantPpeExpression, DefaultPpeExpression, ArrayElementImplList, UnitsList, PpeListValue

syntax ConstantPpeExpression ::= PpeExpression | MBracketLeft BooleanTerm MBracketRight

syntax DefaultPpeExpression ::= PpeExpression | MBracketLeft BooleanTerm MBracketRight

syntax PpeListValue ::= MBracketLeft MBracketRight | MBracketLeft PpeListValueMidSymbol MBracketRight syntax PpeListValueMidSymbol ::= PpeListValue | PpeExpression | PpeListValue MComma PpeListValueMidSymbol | PpeExpression MComma PpeListValueMidSymbol syntax PpeExpression ::= BooleanTerm | RealTerm | IntegerTerm | StringTerm | EnumerationTerm | UnitTerm | RealRangeTerm | IntegerRangeTerm | PpeTerm | CmpClassifierTerm | RefTerm | RecordTerm | ComputedTerm syntax syntax BooleanTerm ::= BooleanValue | BooleanPpeConstantTerm | Mnot BooleanTerm | BooleanTerm Mand BooleanTerm | BooleanTerm Mor BooleanTerm // | MBracketLeft BooleanTerm MBracketRight syntax BooleanPpeConstantTerm ::= PpeConstantTerm syntax PpeConstantTerm ::= AmbDoubleColonId

syntax UnitsList ::= MBracketLeft Id UnitIdList MBracketRight | MBracketLeft Id MBracketRight

syntax ArrayElementImplList ::= MBracketLeft ArrayElementImplListTmps MBracketRight syntax ArrayElementImplListTmps ::= ArrayElementImplListTmp | ArrayElementImplListTmp MComma ArrayElementImplListTmps syntax ArrayElementImplListTmp ::= UniCmpImplRef ProtoTypeBindings | UniCmpImplRef syntax UniCmpImplRef ::= CmpImplName | PkgName MDoubleColon CmpImplName syntax CmpImplName ::= AmbIdPointId

The same products : MBracketLeft Id MBracketRight

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

step1)

It is diffcult for PpeListValue to unfold completely , so we define the middle non-terminal :

syntax AmbBracketLeftBooleanTermBracketRight ::= MBracketLeft BooleanTerm MBracketRight

syntax PpeListValue ::= MBracketLeft MBracketRight | MBracketLeft PpeListValueMidSymbol MBracketRight syntax PpeListValueMidSymbol ::= PpeListValue | PpeExpression | PpeListValue MComma PpeListValueMidSymbol | PpeExpression MComma PpeListValueMidSymbol syntax PpeExpression ::= BooleanTerm | RealTerm | IntegerTerm | StringTerm | EnumerationTerm | UnitTerm | RealRangeTerm | IntegerRangeTerm | PpeTerm | CmpClassifierTerm | RefTerm | RecordTerm | ComputedTerm

==>>

syntax PpeListValue ::= MBracketLeft MBracketRight | MBracketLeft PpeListValue MBracketRight | MBracketLeft PpeListValue MComma PpeListValueMidSymbol MBracketRight | MBracketLeft PpeExpression MComma PpeListValueMidSymbol MBracketRight | MBracketLeft RealTerm MBracketRight | MBracketLeft IntegerTerm MBracketRight | MBracketLeft StringTerm MBracketRight | MBracketLeft EnumerationTerm MBracketRight | MBracketLeft UnitTerm MBracketRight | MBracketLeft RealRangeTerm MBracketRight | MBracketLeft IntegerRangeTerm MBracketRight | MBracketLeft PpeTerm MBracketRight | MBracketLeft CmpClassifierTerm MBracketRight | MBracketLeft RefTerm MBracketRight | MBracketLeft CmpClassifierTerm MBracketRight | MBracketLeft RecordTerm MBracketRight | MBracketLeft ComputedTerm MBracketRight | AmbBracketLeftBooleanTermBracketRight

syntax ConstantPpeExpression ::= PpeExpression | AmbBracketLeftBooleanTermBracketRight

syntax DefaultPpeExpression ::= PpeExpression | AmbBracketLeftBooleanTermBracketRight

step2)

syntax AmbBracketLeftIdBracketRight ::= MBracketLeft Id MBracketRight

syntax BooleanTerm ::= BooleanValue | BooleanPpeConstantTerm | Mnot BooleanTerm | BooleanTerm Mand BooleanTerm | BooleanTerm Mor BooleanTerm // | MBracketLeft BooleanTerm MBracketRight syntax BooleanPpeConstantTerm ::= PpeConstantTerm syntax PpeConstantTerm ::= AmbDoubleColonId syntax AmbDoubleColonId ::= Id | Id MDoubleColon Id

syntax AmbBracketLeftBooleanTermBracketRight ::= MBracketLeft BooleanValue MBracketRight | MBracketLeft Mnot BooleanTerm MBracketRight | MBracketLeft BooleanTerm Mor BooleanTerm Mand BooleanTerm MBracketRight | MBracketLeft MBracketLeft BooleanTerm MBracketRight MBracketRight | MBracketLeft Id MDoubleColon Id MBracketRight | AmbBracketLeftIdBracketRight

If appear ambiguity about AmbBracketLeftBooleanTermBracketRight then we replace it with its defination in DefaultPpeExpression ,ConstantPpeExpression ,PpeListValue .

step3) syntax UnitsList ::= MBracketLeft Id UnitIdList MBracketRight | AmbBracketLeftIdBracketRight

step4) syntax ArrayElementImplList ::= MBracketLeft ArrayElementImplListTmps MBracketRight syntax ArrayElementImplListTmps ::= ArrayElementImplListTmp | ArrayElementImplListTmp MComma ArrayElementImplListTmps syntax ArrayElementImplListTmp ::= UniCmpImplRef ProtoTypeBindings | UniCmpImplRef syntax UniCmpImplRef ::= CmpImplName | PkgName MDoubleColon CmpImplName syntax CmpImplName ::= AmbIdPointId syntax AmbIdPointId ::= Id | Id MPoint Id

==>>

syntax ArrayElementImplList ::= MBracketLeft ArrayElementImplListTmp MComma ArrayElementImplListTmps MBracketRight | MBracketLeft UniCmpImplRef ProtoTypeBindings MBracketRight | MBracketLeft PkgName MDoubleColon CmpImplName MBracketRight | MBracketLeft Id MPoint Id MBracketRight | AmbBracketLeftIdBracketRight

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 4) //////////////////////////////////////////////////////// ConnectIdSubcompenentFlowIdnetifierList, ConnectionSubcompenentFlowAssocDef, ConnectionIdFlowPathList

syntax ConnectIdSubcompenentFlowIdnetifierList ::= MArrows Id MArrows SubCmpFlowId | MArrows Id MArrows SubCmpFlowId ConnectIdSubcompenentFlowIdnetifierList

syntax ConnectionSubcompenentFlowAssocDef ::= MArrows Id MArrows SubCmpFlowId | MArrows Id MArrows SubCmpFlowId ConnectionSubcompenentFlowAssocDef

syntax ConnectionIdFlowPathList ::= MArrows SubCmpFlowId MArrows SubCmpFlowId | MArrows SubCmpFlowId MArrows SubCmpFlowId ConnectionIdFlowPathList

The same :MArrows Id MArrows SubCmpFlowId

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

step1) syntax AmbArrowsIdArrowsSubCmpFlowId ::= MArrows Id MArrows SubCmpFlowId

syntax SubCmpFlowId ::= AmbIdPointId

syntax AmbArrowsIdArrowsSubCmpFlowId ::= MArrows Id MArrows Id | MArrows Id MArrows Id MPoint Id

step2) syntax ConnectIdSubcompenentFlowIdnetifierList ::= AmbArrowsIdArrowsSubCmpFlowId | MArrows Id MArrows SubCmpFlowId ConnectIdSubcompenentFlowIdnetifierList step3) syntax ConnectionSubcompenentFlowAssocDef ::= AmbArrowsIdArrowsSubCmpFlowId | MArrows Id MArrows SubCmpFlowId ConnectionSubcompenentFlowAssocDef step4) syntax ConnectionIdFlowPathList ::= AmbArrowsIdArrowsSubCmpFlowId
| MArrows SubCmpFlowId MArrows SubCmpFlowId ConnectionIdFlowPathList

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 5) //////////////////////////////////////////////////////// 5)FetGroupTypeProtoTypeActual, FetGroupTypeProtoType, FetGroupSpecAssocDef

syntax FetGroupTypeProtoTypeActual ::= Mfeature Mgroup UniFetGroupTypeRef | Mfeature Mgroup UniFetGroupTypeRef ProtoTypeBindings | Mfeature Mgroup Id

syntax FetGroupTypeProtoType ::= Mfeature Mgroup | Mfeature Mgroup UniFetGroupTypeRef

syntax FetGroupSpecAssocDef ::= Min Mfeature Mgroup InverseOfUniProtoType | Mout Mfeature Mgroup InverseOfUniProtoType | Mfeature Mgroup InverseOfUniProtoType syntax InverseOfUniProtoType ::= AmbInverseOfUniFetGroupTypeRef // | Minverse Mof Id | UniFetGroupTypeRef // | Id

The same : Mfeature Mgroup UniFetGroupTypeRef

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

step1) syntax AmbFeatureGroupUniFetGroupTypeRef ::= Mfeature Mgroup UniFetGroupTypeRef syntax UniFetGroupTypeRef ::= Id | PkgName MDoubleColon Id

syntax AmbFeatureGroupUniFetGroupTypeRef ::= Mfeature Mgroup Id | Mfeature Mgroup Id MDoubleColon Id | Mfeature Mgroup Id MDoubleColon Id MDoubleColon Id step2)

syntax FetGroupTypeProtoTypeActual ::= AmbFeatureGroupUniFetGroupTypeRef | Mfeature Mgroup UniFetGroupTypeRef ProtoTypeBindings | Mfeature Mgroup Id

step3)

syntax FetGroupTypeProtoType ::= Mfeature Mgroup | AmbFeatureGroupUniFetGroupTypeRef

step4) syntax FetGroupSpecAssocDef ::= Min Mfeature Mgroup InverseOfUniProtoType | Mout Mfeature Mgroup InverseOfUniProtoType | AmbFeatureGroupUniFetGroupTypeRef

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 6) //////////////////////////////////////////////////////// FetGroupTypeAssocDefElem, FetGroupTypeExtAssocDefElem, InverseOfUniProtoType ????

syntax FetGroupTypeAssocDefElem ::= Mprototypes ProtoTypeList | Mprototypes NoneStatement | Mfeatures FeatureList | AmbInverseOfUniFetGroupTypeRef | Mproperties FetGroupContainedPpeAssocList | Mproperties NoneStatement | AnnexSubclauseList

syntax FetGroupTypeExtAssocDefElem ::= Mprototypes ProtoTypeList | Mprototypes ProtoTypeRefinementList | Mprototypes NoneStatement | Mfeatures FeatureList | Mfeatures FetRefinementList | AmbInverseOfUniFetGroupTypeRef | Mproperties FetGroupContainedPpeAssocList | Mproperties NoneStatement | AnnexSubclauseList

syntax InverseOfUniProtoType ::= AmbInverseOfUniFetGroupTypeRef // | Minverse Mof Id | UniFetGroupTypeRef // | Id syntax UniFetGroupTypeRef ::= Id | PkgName MDoubleColon Id

The same : AmbInverseOfUniFetGroupTypeRef

/////////////////////////////////////////////// Solution //////////////////////////////////////////////////////// redefine :

syntax AmbInverseOfUniFetGroupTypeRef ::= Minverse Mof Id | Minverse Mof Id MDoubleColon Id | Minverse Mof Id MDoubleColon Id MDoubleColon Id

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 7) //////////////////////////////////////////////////////// InModes, CmpInModes, InModesAndTransitions

syntax InModes ::= Min Mmodes MBracketLeft ModeIdList MBracketRight syntax ModeIdList ::= Id | Id MComma ModeIdList

syntax CmpInModes ::= Min Mmodes MBracketLeft ModeNameList MBracketRight syntax ModeNameList ::= ModeName | ModeName MComma ModeNameList syntax ModeName ::= Id | Id MRoughArrow Id

syntax InModesAndTransitions ::= Min Mmodes MBracketLeft ModeOrTransitionList MBracketRight syntax ModeOrTransitionList ::= Id | Id MComma ModeOrTransitionList

The same : Min Mmodes MBracketLeft Id MBracketRight

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

step1) syntax AmbInModesBracketLeftIdBracketRight ::= Min Mmodes MBracketLeft Id MBracketRight

step2) syntax InModes ::= Min Mmodes MBracketLeft Id MComma ModeIdList MBracketRight | AmbInModesBracketLeftIdBracketRight

step3) syntax CmpInModes ::= AmbInModesBracketLeftIdBracketRight | Min Mmodes MBracketLeft Id MRoughArrow Id MBracketRight | Min Mmodes MBracketLeft ModeName MComma ModeNameList MBracketRight step4)

syntax InModesAndTransitions ::= AmbInModesBracketLeftIdBracketRight | Min Mmodes MBracketLeft Id MComma ModeOrTransitionList MBracketRight

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 8) //////////////////////////////////////////////////////// IntegerRange, IntegerRangeTerm

syntax IntegerRange ::= SignedAadlintegerOrConstant MDoubleDiont SignedAadlintegerOrConstant syntax SignedAadlintegerOrConstant ::= SignedAadlinteger | IntegerPpeConstantTerm | Sign IntegerPpeConstantTerm syntax SignedAadlinteger ::= Sign IntegerLiteral Id | Sign IntegerLiteral | IntegerLiteral Id | IntegerLiteral

syntax IntegerRangeTerm ::= IntegerTerm MDoubleDiont IntegerTerm | IntegerTerm MDoubleDiont IntegerTerm Mdelta IntegerTerm | IntegerRangePpeConstantTerm syntax IntegerTerm ::= SignedAadlintegerOrConstant

The same : IntegerTerm MDoubleDiont IntegerTerm

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

syntax AmbSignedAadlintegerOrConstantDoubleDiontSignedAadlintegerOrConstant ::= SignedAadlintegerOrConstant MDoubleDiont SignedAadlintegerOrConstant

step1) syntax IntegerRange ::= AmbSignedAadlintegerOrConstantDoubleDiontSignedAadlintegerOrConstant

step2) syntax IntegerRangeTerm ::= AmbSignedAadlintegerOrConstantDoubleDiontSignedAadlintegerOrConstant | IntegerTerm MDoubleDiont IntegerTerm Mdelta IntegerTerm | IntegerRangePpeConstantTerm

It may appear the ambiguity of AmbSignedAadlintegerOrConstantDoubleDiontSignedAadlintegerOrConstant

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 9) //////////////////////////////////////////////////////// RefType, RefTerm

syntax RefType ::= Mreference | Mreference MBracketLeft RefCategoryList MBracketRight syntax RefCategoryList ::= Id | Id MComma RefCategoryList

syntax RefTerm ::= Mreference MBracketLeft ContainedModelElementPath MBracketRight

syntax ContainedModelElementPath ::= AnnexPath | ContainedModelElementList AnnexPath | ContainedModelElementList syntax ContainedModelElementList ::= ContainedModelElement | ContainedModelElement MPoint ContainedModelElementList syntax ContainedModelElement ::= Id | NamedElementArraySelectionName

The same products: Mreference MBracketLeft Id MBracketRight

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

step1)
syntax AmbReferenceBracketLeftIdBracketRight ::= Mreference MBracketLeft Id MBracketRight

step2) syntax RefType ::= Mreference | AmbReferenceBracketLeftIdBracketRight | Mreference MBracketLeft Id MComma RefCategoryList MBracketRight

step3) syntax RefTerm ::= Mreference MBracketLeft AnnexPath MBracketRight | Mreference MBracketLeft ContainedModelElementList AnnexPath MBracketRight | Mreference MBracketLeft ContainedModelElement MPoint ContainedModelElementList MBracketRight | Mreference MBracketLeft NamedElementArraySelectionName MBracketRight | AmbReferenceBracketLeftIdBracketRight

suweining commented 9 years ago

/////////////////////////////////////////////// Ambiguity 10) //////////////////////////////////////////////////////// ClassifierType, CmpClassifierTerm

syntax ClassifierType ::= Mclassifier | Mclassifier MBracketLeft ClassifierCategoryRefList MBracketRight syntax ClassifierCategoryRefList ::= ClassifierCategoryRef | ClassifierCategoryRef MComma ClassifierCategoryRefList syntax ClassifierCategoryRef ::= MetaModelClassId | MBraceLeft Id MAsteriskBrace3 MetaModelClassId syntax MetaModelClassId ::= Id | Id MetaModelClassId

syntax CmpClassifierTerm ::= Mclassifier MBracketLeft UniCmpTypeRef MBracketRight | Mclassifier MBracketLeft UniCmpImplRef MBracketRight syntax UniCmpTypeRef ::= PkgName MDoubleColon Id | Id

The same product: Mclassifier MBracketLeft Id MBracketRight

/////////////////////////////////////////////// Solution ////////////////////////////////////////////////////////

step1) syntax AmbClassifierBracketLeftIdBracketRight ::= Mclassifier MBracketLeft Id MBracketRight

step2) syntax ClassifierType ::= Mclassifier | Mclassifier MBracketLeft ClassifierCategoryRef MComma ClassifierCategoryRefList MBracketRight | Mclassifier MBracketLeft MBraceLeft Id MAsteriskBrace3 MetaModelClassId MBracketRight | Mclassifier MBracketLeft Id MetaModelClassId MBracketRight | AmbClassifierBracketLeftIdBracketRight

syntax ClassifierCategoryRefList ::= ClassifierCategoryRef | ClassifierCategoryRef MComma ClassifierCategoryRefList syntax ClassifierCategoryRef ::= MetaModelClassId | MBraceLeft Id MAsteriskBrace3 MetaModelClassId syntax MetaModelClassId ::= Id | Id MetaModelClassId

step3)

syntax CmpClassifierTerm ::= Mclassifier MBracketLeft UniCmpTypeRef MBracketRight | Mclassifier MBracketLeft PkgName MDoubleColon Id MBracketRight | AmbClassifierBracketLeftIdBracketRight syntax UniCmpTypeRef ::= PkgName MDoubleColon Id | Id

suweining commented 9 years ago

The ambiguities are more and more complicated !