Udostępnij za pośrednictwem


Konteksty zagnieżdżone GDL

Kontekst zagnieżdżony jest wprowadzany z początkowym znakiem zagnieżdżania (który jest nawiasem otwierającym lub nawiasem kwadratowym otwierającym). Kontekst zagnieżdżony kończy się, gdy napotka się pasujący znak kończący zagnieżdżenie (jak nawias zamykający lub nawias kwadratowy).

Konteksty zagnieżdżenia można zagnieżdżać w obrębie siebie. Znaki kończące zagnieżdżenie mogą być używane tylko do zakończenia bieżącego kontekstu zagnieżdżania. Jeśli znaki zagnieżdżenia końcowego pojawiają się gdziekolwiek indziej, jest to błąd składniowy.

W kontekście zagnieżdżonym znaki ogranicznika konstrukcji tracą znaczenie jako ograniczniki konstrukcji i są również traktowane jako ograniczniki kontekstu zagnieżdżonego. W kontekście zagnieżdżonym sekwencja złamania linii jest traktowana jako białe znaki nieliteralne.

Kontekst zagnieżdżony może pojawić się poza wszelkim innym kontekstem lub wewnątrz innego kontekstu zagnieżdżonego, ale nie w żadnym innym rodzaju kontekstu. Dowolny kontekst, w tym inne konteksty zagnieżdżone, może być wyświetlany w kontekście zagnieżdżonym, z wyjątkiem kontekstu HexSubString.

Poniższy przykład kodu przedstawia zagnieżdżony kontekst GDL.

*good_nests: ( { } [ ( ) ] )

W poniższych przykładach kodu przedstawiono zagnieżdżone konteksty GDL zawierające błędy.

*bad_nests: (  ] *%  end nesting delimiter can only be used within its nesting context.
*bad_nests: (  ]  )
*bad_nests:   ] [   *%  end nesting delimiter can only be used within its nesting context.
*bad_nests: (  [  )   ]   *%  end nesting delimiter can only be used within its nesting*% context.  In this case the ')' char cannot be used within the context begun 
*%by '[' .
*bad_nests:  {  [ ]  }  *% attempt to use construct delimiter to define a nesting context 
*%  outside of a nesting context.

Cała zawartość kontekstu zagnieżdżonego jest traktowana jako część wartości. Na przykład poniższy kod GDL reprezentuje jeden wpis ze słowem kluczowym "*KeywordA". Pozostała część fragmentu jest wartością *KeywordA, ponieważ to, co wygląda jak oddzielne wpisy *KeywordB i *KeywordC, znajduje się w kontekście zagnieżdżonym. W rzeczywistości liczby "12, 38, 709" są same w zagnieżdżonym kontekście zdefiniowanym przez ograniczniki nawiasów, które są zagnieżdżone w kontekście zewnętrznym zdefiniowanym przez ograniczniki nawiasów kwadratowych.

*KeywordA: [
*KeywordB:  List(12, 38, 709)
*KeywordC:  "the small brown fox" ]