Dela via


Problem med sammansatt malldatatyp

När sammansatta datatyper skapas från andra datatyper och parenteser används för att omsluta en av datatyperna, måste alla datatyper som omger en parentesparenteserad datatyp också omges av parenteser.

Anta till exempel att du definierar en lista över GPD-heltal med hjälp av följande mallar.

*Template:  LIST_OF_INTS
{
    *Type:  DATATYPE
    *DataType:   ARRAY
    *ElementType:  INTEGER
    *RequiredDelimiter: ","
    *OptionalDelimiter: "<20 09>"
    *ElementTags: (int)
    *ArraySize: *
}
*Template:  LIST_OF_LIST_OF_INTS
{
    *Type:  DATATYPE
    *DataType:   ARRAY
    *ElementType:  LIST_OF_INTS
    *RequiredDelimiter: ":"
    *OptionalDelimiter: "<20 09>"
    *ElementTags: (IntList)
    *ArraySize: *
}

Sedan är följande värden giltiga och motsvarande uttryck för den LIST_OF_LIST_OF_INTS datatypen.

*ListList: 1,2,3:10,11,12:20,21,22 
*ListList: (1,2,3:10,11,12:20,21,22)
*ListList: ((1,2,3):(10,11,12):(20,21,22))

Följande värde bryter dock mot kapslingen av parentesregeln.

*ListList: (1,2,3):(10,11,12):(20,21,22)

Föregående exempel genererar ett syntaxfel eftersom parserfiltret förutsätter att alla parenteser som det stöter på tillhör den yttersta kontexten, nästa parentes tillhör nästa kontext och så vidare.