FormalADL / kAADL

1 stars 1 forks source link

Error03:Update error about “krun --backend java *.aadl“ #8

Closed suweining closed 9 years ago

suweining commented 9 years ago

1) CmpProtoTypeActual, CmpProtoType

in ComponentTypes.aadl

2) SubCmpAssocDef, ModalPpeValue

in ModesAndModeTransitions.aadl

3) ArrayDimensionFeatrueContrained, EndToEndFlowSpecAssocDefault, PpeAssocInModes, SubCmpAssocDefElem, PpeInMode,

FlowSourceSpecRefinementAssocDef, EndToEndSpecRefinementDefault

in

Ports.aadl.error PropertyExpressions.aadl

4) ProtoType, SubCmp, AmbIdColonSubprogramIdSemicolon

in SubprogramsAndSubprogramCalls.aadl

5) AmbIdBracketLeftIdBracketRight, CmpClassifierTerm, AmbClassifierBracketLeftIdBracketRight

in VirtualBuses.aadl.error

6) UniCmpTypeRef ::= PkgName MDoubleColon Id UniCmpImplRef ::= PkgName MDoubleColon CmpImplName

in BusComponentAccess.aadl Devices.aadl

7)

PpeListValue ::= MBracketLeft IntegerTerm MBracketRight

PpeListValue ::= MBracketLeft RealTerm MBracketRight

PpeListValue ::= MBracketLeft RealRangeTerm MBracketRight

PpeListValue ::= MBracketLeft IntegerRangeTerm MBracketRight

PpeListValue ::= MBracketLeft StringTerm MBracketRight

PpeListValue ::= MBracketLeft EnumerationTerm MBracketRight

PpeListValue ::= MBracketLeft PpeTerm MBracketRight

PpeListValue ::= MBracketLeft UnitTerm MBracketRight

AmbBracketLeftIdBracketRight ::= MBracketLeft Id MBracketRight

( TemperatureSensorHardwareModel )

File: ../tests/unit/Devices.aadl Location: (18,39,18,73)

suweining commented 9 years ago

//////////////////////////////////// Ambiguity 1) //////////////////////////////////////////////// CmpProtoTypeActual , CmpProtoType in ComponentTypes.aadl

syntax CmpProtoTypeActual ::= CmpCategory UniCmpClassifierRef ProtoTypeBindings | CmpCategory UniCmpClassifierRef | CmpCategory Id

syntax CmpProtoType ::= CmpCategory | CmpCategory MDoubleBracket | CmpCategory UniCmpClassifierRef | CmpCategory UniCmpClassifierRef MDoubleBracket

The same product : CmpCategory UniCmpClassifierRef

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

syntax AmbCmpCategoryUniCmpClassifierRef ::= CmpCategory UniCmpClassifierRef

syntax CmpProtoType ::= CmpCategory | CmpCategory MDoubleBracket | AmbCmpCategoryUniCmpClassifierRef
| CmpCategory UniCmpClassifierRef MDoubleBracket

syntax CmpProtoTypeActual ::= CmpCategory UniCmpClassifierRef ProtoTypeBindings | AmbCmpCategoryUniCmpClassifierRef | CmpCategory Id

suweining commented 9 years ago

//////////////////////////////////// Ambiguity 2)//////////////////////////////////////////////// SubCmpAssocDef, ModalPpeValue in ModesAndModeTransitions.aadl

syntax SubCmpAssocDef ::= SubCmpAssocDefElem | SubCmpAssocDefElem SubCmpAssocDef syntax SubCmpAssocDefElem ::= UniCmpClassifierRef | UniCmpClassifierRef ProtoTypeBindings | Id | ArrayDimension | ArrayDimensions ArrayElementImplList | MBraceLeft PpeContainedPpeAssocList MBraceRight | CmpInModes syntax CmpInModes ::= AmbInModesBracketLeftIdBracketRight | Min Mmodes MBracketLeft Id MRoughArrow Id MBracketRight | Min Mmodes MBracketLeft ModeName MComma ModeNameList MBracketRight syntax ModeNameList ::= ModeName | ModeName MComma ModeNameList syntax ModeName ::= Id | Id MRoughArrow Id

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

The same product may be : Id AmbInModesBracketLeftIdBracketRight Id Min Mmodes MBracketLeft Id MComma ModeIdList MBracketRight

It just is : Id Min Mmodes MBracketLeft ModeIdList MBracketRight

////////////////////////////////////////////// Solution 【wrong】///////////////////////////////////////////////////

It is still CmpInModes and InModes such as Error02 7).

This ambiguity is caused by "Min Mmodes MBracketLeft ModeName MComma ModeNameList MBracketRight" containing "Min Mmodes MBracketLeft Id MComma ModeIdList MBracketRight"

I just joint the InModes into the defination of CmpInModes :

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

In such this defination above,there are lots of duplicate definition .

It is diffcult to abstract InModes from CmpInModes.

Kompile and krun。Answer is

SubCmpAssocDef, ModalPpeValue

suweining commented 9 years ago

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

ArrayDimensionFeatrueContrained, EndToEndFlowSpecAssocDefault, PpeAssocInModes, SubCmpAssocDefElem, PpeInMode, FlowSourceSpecRefinementAssocDef, EndToEndSpecRefinementDefault

syntax ArrayDimensionFeatrueContrained ::= ArrayDimension | MBraceLeft FeatrueContrainedPpeAssoc MBraceRight | ArrayDimension MBraceLeft FeatrueContrainedPpeAssoc MBraceRight syntax FeatrueContrainedPpeAssoc ::= ContainedPpeAssoc | PpeAssoc | ContainedPpeAssoc FeatrueContrainedPpeAssoc | PpeAssoc FeatrueContrainedPpeAssoc

syntax EndToEndFlowSpecAssocDefault ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

syntax PpeAssocInModes ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

syntax SubCmpAssocDefElem ::= UniCmpClassifierRef | UniCmpClassifierRef ProtoTypeBindings | Id | ArrayDimension | ArrayDimensions ArrayElementImplList | MBraceLeft PpeContainedPpeAssocList MBraceRight | CmpInModes syntax PpeContainedPpeAssocList ::= PpeAssoc | ContainedPpeAssoc | PpeAssoc PpeContainedPpeAssocList | ContainedPpeAssoc PpeContainedPpeAssocList

syntax PpeInMode ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

syntax FlowSourceSpecRefinementAssocDef ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

syntax EndToEndSpecRefinementDefault ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

The same product: MBraceLeft PpeAssoc MBraceRight

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

step1)

syntax AmbBraceLeftPpeAssocBraceRight ::= MBraceLeft PpeAssoc MBraceRight 【need unfold】

syntax AmbEndToEndFlowSpecAssocDefaultPpeInMode ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | InModesAndTransitions | MBraceLeft PpeAssoc PpeAssocList MBraceRight | MBraceLeft PpeAssoc MBraceRight 【AmbBraceLeftPpeAssocBraceRight】

step2)

syntax ArrayDimensionFeatrueContrained ::= ArrayDimension | MBraceLeft FeatrueContrainedPpeAssoc MBraceRight | ArrayDimension MBraceLeft FeatrueContrainedPpeAssoc MBraceRight syntax FeatrueContrainedPpeAssoc ::= ContainedPpeAssoc | PpeAssoc | ContainedPpeAssoc FeatrueContrainedPpeAssoc | PpeAssoc FeatrueContrainedPpeAssoc

==>>

syntax ArrayDimensionFeatrueContrained ::= ArrayDimension | ArrayDimension MBraceLeft FeatrueContrainedPpeAssoc MBraceRight | MBraceLeft ContainedPpeAssoc MBraceRight | MBraceLeft ContainedPpeAssoc FeatrueContrainedPpeAssoc MBraceRight | MBraceLeft PpeAssoc FeatrueContrainedPpeAssoc MBraceRight | MBraceLeft PpeAssoc MBraceRight 【AmbBraceLeftPpeAssocBraceRight】

step3)

syntax EndToEndFlowSpecAssocDefault ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

==>>

syntax EndToEndFlowSpecAssocDefault ::= AmbEndToEndFlowSpecAssocDefaultPpeInMode

step4)

syntax PpeAssocInModes ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

==>>

syntax PpeAssocInModes ::= AmbEndToEndFlowSpecAssocDefaultPpeInMode

step5)

syntax SubCmpAssocDefElem ::= UniCmpClassifierRef | UniCmpClassifierRef ProtoTypeBindings | Id | ArrayDimension | ArrayDimensions ArrayElementImplList | MBraceLeft PpeContainedPpeAssocList MBraceRight | CmpInModes syntax PpeContainedPpeAssocList ::= PpeAssoc | ContainedPpeAssoc | PpeAssoc PpeContainedPpeAssocList | ContainedPpeAssoc PpeContainedPpeAssocList

==>>

syntax SubCmpAssocDefElem ::= UniCmpClassifierRef | UniCmpClassifierRef ProtoTypeBindings | Id | ArrayDimension | ArrayDimensions ArrayElementImplList | CmpInModes | MBraceLeft ContainedPpeAssoc MBraceRight | MBraceLeft PpeAssoc PpeContainedPpeAssocList MBraceRight | MBraceLeft ContainedPpeAssoc PpeContainedPpeAssocList MBraceRight | MBraceLeft PpeAssoc MBraceRight 【AmbBraceLeftPpeAssocBraceRight】

strp6)

syntax PpeInMode ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

==>>

syntax PpeInMode ::= AmbEndToEndFlowSpecAssocDefaultPpeInMode

step7)

syntax FlowSourceSpecRefinementAssocDef ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

==>>

syntax FlowSourceSpecRefinementAssocDef ::= AmbEndToEndFlowSpecAssocDefaultPpeInMode

step8)

syntax EndToEndSpecRefinementDefault ::= MBraceLeft PpeAssocList MBraceRight InModesAndTransitions | MBraceLeft PpeAssocList MBraceRight | InModesAndTransitions syntax PpeAssocList ::= PpeAssoc | PpeAssoc PpeAssocList

syntax EndToEndSpecRefinementDefault ::= AmbEndToEndFlowSpecAssocDefaultPpeInMode

suweining commented 9 years ago

//////////////////////////////////// Ambiguity 4)//////////////////////////////////////////////// ProtoType, SubCmp, AmbIdColonSubprogramIdSemicolon

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

syntax SubCmp ::= AmbIdColonCmpCategorySemicolon | 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

syntax AmbIdColonSubprogramIdSemicolon ::= Id Mcolon Msubprogram Id MSemicolon

The same product : Id Mcolon Msubprogram Id MSemicolon

/////////////////////////////////////////// Solution A //////////////////////////////////////////////

I just delete AmbIdColonSubprogramIdSemicolon from the defination of SubCmp and ProtoType .

//////////////////////////////////// Solution B //////////////////////////////////////////////////

The reason of this ambiguity is ambiguity.

It is come from that the defination of "UniCmpClassifierRef" contain Id.

step1)

"Id Mcolon Msubprogram UniCmpClassifierRef MSemicolon" can infer to 【AmbIdColonSubprogramIdSemicolon】

syntax UniCmpClassifierRef ::= UniCmpTypeRef | UniCmpImplRef

syntax UniCmpTypeRef ::= PkgName syntax PkgName ::= Id | Id MDoubleColon PkgName

syntax UniCmpImplRef ::= CmpImplName | PkgName MDoubleColon CmpImplName syntax CmpImplName ::= AmbIdPointId

==>>

syntax UniCmpClassifierRef ::= PkgName | Id MPoint Id | PkgName MDoubleColon AmbIdPointId

so the product

Id Mcolon Msubprogram UniCmpClassifierRef MSemicolon

should change to:

Id Mcolon Msubprogram Id MSemicolon 【AmbIdColonSubprogramIdSemicolon】 Id Mcolon Msubprogram Id MPoint Id MSemicolon Id Mcolon Msubprogram Id MDoubleColon PkgName MSemicolon Id Mcolon Msubprogram PkgName MDoubleColon AmbIdPointId MSemicolon

step2) "Id Mcolon CmpCategory UniCmpClassifierRef MSemicolon" can infers to 【AmbIdColonSubprogramIdSemicolon】

syntax CmpCategory ::= AbstractCmpCategory | SoftwareCategory | ExecPlateformCategory | CompositeCategory syntax SoftwareCategory ::= Mdata | Msubprogram | Msubprogram Mgroup | Mthread | Mthread Mgroup | Mprocess

so the product

Id Mcolon CmpCategory UniCmpClassifierRef MSemicolon

should change to:

Id Mcolon AbstractCmpCategory UniCmpClassifierRef MSemicolon Id Mcolon ExecPlateformCategory UniCmpClassifierRef MSemicolon Id Mcolon CompositeCategory UniCmpClassifierRef MSemicolon

Id Mcolon Mdata UniCmpClassifierRef MSemicolon Id Mcolon Msubprogram Mgroup UniCmpClassifierRef MSemicolon Id Mcolon Mthread UniCmpClassifierRef MSemicolon Id Mcolon Mthread Mgroup UniCmpClassifierRef MSemicolon Id Mcolon Mprocess UniCmpClassifierRef MSemicolon

Id Mcolon Msubprogram UniCmpClassifierRef MSemicolon

the "Id Mcolon Msubprogram UniCmpClassifierRef MSemicolon" also need to unfold.

suweining commented 9 years ago

//////////////////////////////////// Ambiguity 5)////////////////////////////////////////////////

AmbIdBracketLeftIdBracketRight, CmpClassifierTerm, AmbClassifierBracketLeftIdBracketRight

syntax AmbIdBracketLeftIdBracketRight ::= Mclassifier MBracketLeft Id MBracketRight

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

syntax AmbClassifierBracketLeftIdBracketRight ::= Mclassifier MBracketLeft Id MBracketRight

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

step1) Just delete AmbIdBracketLeftIdBracketRight.

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

==>>

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

syntax UniCmpTypeRef ::= PkgName

suweining commented 9 years ago

//////////////////////////////////// Ambiguity 6)////////////////////////////////////////////////

syntax UniCmpTypeRef ::= PkgName MDoubleColon Id | Id

syntax UniCmpImplRef ::= CmpImplName | PkgName MDoubleColon CmpImplName

syntax CmpImplName ::= AmbIdPointId

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

Because the defination of PkgName is :

syntax PkgName ::= Id | PkgName MDoubleColon Id

You can see, "UniCmpTypeRef" is just a "PkgName" .

So our solution is:

syntax UniCmpTypeRef ::= PkgName

syntax UniCmpImplRef ::= AmbIdPointId | PkgName MDoubleColon AmbIdPointId

suweining commented 9 years ago

//////////////////////////////////// Ambiguity 7)////////////////////////////////////////////////

PpeListValue ::= MBracketLeft IntegerTerm MBracketRight

PpeListValue ::= MBracketLeft RealTerm MBracketRight

PpeListValue ::= MBracketLeft RealRangeTerm MBracketRight

PpeListValue ::= MBracketLeft IntegerRangeTerm MBracketRight

PpeListValue ::= MBracketLeft StringTerm MBracketRight

PpeListValue ::= MBracketLeft EnumerationTerm MBracketRight

PpeListValue ::= MBracketLeft PpeTerm MBracketRight

PpeListValue ::= MBracketLeft UnitTerm MBracketRight

AmbBracketLeftIdBracketRight ::= MBracketLeft Id MBracketRight

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

step1)

Define a non-terminal PpeExpressionWithoutBooleanTerm :

syntax PpeExpressionWithoutBooleanTerm ::= RealTerm | IntegerTerm | StringTerm | EnumerationTerm | UnitTerm | RealRangeTerm | IntegerRangeTerm | PpeTerm | CmpClassifierTerm | RefTerm | RecordTerm | ComputedTerm

step2)

So we redefine the PpeListValue by PpeExpressionWithoutBooleanTerm :

syntax PpeListValue ::= MBracketLeft MBracketRight | MBracketLeft PpeListValue MBracketRight | MBracketLeft PpeListValue MComma PpeListValueMidSymbol MBracketRight | MBracketLeft PpeExpression MComma PpeListValueMidSymbol MBracketRight | MBracketLeft PpeExpressionWithoutBooleanTerm MBracketRight | AmbBracketLeftBooleanTermBracketRight