Unbekannter Bezeichner : xxx

Top  Previous  Next

Meldungen > Unbekannter Bezeichner : xxx

 

Die Meldung "Unbekannter Bezeichner : xxx" ist durch einen Fehler im Interpretercode verursacht. Eine Variable wurde verwendet, die nicht zuvor deklariert wurde. Die Ursache dieser Meldung kann bisweilen versteckt sein (s.u.).

Die Meldung kann auch als Folge des Auftretens eines anderen, vorhergehenden Fehlers erfolgen.

 

Beispiel

 

Die Zuweisung

 

s = "Hallo";

 

erzeugt die Fehlermeldung "Unbekannter Bezeichner : s", wenn die Variable s nicht zuvor deklariert wurde. Richtig wäre daher:

 

str s;

s = "Hallo";

 

oder in einer Anweisung zusammengefasst:

 

str s = "Hallo";

 

 

Für Interpreter unsichtbare Deklaration in Exportcode

 

Die Fehlermeldung erscheint z.B auch, wenn die Deklaration einer Variablen in den Klammern "{_" und "_} erfolgt:

 

{_str sComment;_}

 

die Variable anschließend aber im Interpretercode auftaucht:

 

(

Comment[sComment] 

)+

 

sComment wird als unbekannter Bezeichner reklamiert, wenn in den Projektoptionen für Parameter und "{{...}}" interpretierbar aktiviert ist.

 

 

versteckte Sichtbarkeitsbereiche

 

Eine einmal deklarierte Variable existiert, solange ihr Sichtbarkeitsbereich besteht. Ein Sichtbarkeitsbereich ist der gesamte Text einer Produktion/Token oder der Bereich der durch das Klammerpaar '{' und '}' begrenzt ist oder er kann indirekt durch Alternativen definiert sein.

Lautet der Text einer Produktion z.B.:

 

if( xi == 1 )

{

str s = "eins";

out << s;

}

s = "zwei"  // Fehler

 

so kann dem str s in den Zeilen, die der schließenden Klammer '}' folgen, nichts mehr zugewiesen werden, da er nicht mehr existiert.

 

Achtung: Alternativen definieren Sichtbarkeitsbereiche, die nicht unmittelbar zu erkennen sind.

 

Beispiel

 

Die folgende Produktion verursacht die Fehlermeldung "Unbekannter Bezeichener : s", obwohl der str s korrekt deklariert scheint:

 

{{str s; }}

"a"

| "b"

print[s]

 

Tatsächlich werden durch die Alternative versteckte Sichtbarkeitsbereiche eingeführt.

 

{{str s; }}

"a"

 

und

 

"b"

print[s]

 

stehen jeweils in einem eigenen Bereich. Deutlich wird dies in der Baumdarstellung der Produktion:

 

HiddenScope

 

Die semantische Aktion, die den str deklariert, wird unmittelbar vor der Erkennung von "a" ausgeführt und nicht vor der gesamten Alternative. Um dieses Ziel zu erreichen, muss die Alternative geklammert werden:

 

 

{{str s; }}

(

"a"

| "b"

print[s]

)

 

Die Baumdarstellung sieht nun folgendermaßen aus:

 

HiddenScope2

 

Die Deklaration steht nun vor der gesamten Alternative und auf die Variable s kann in der gesamten Produktion zugegriffen werden. Der Fehler ist behoben.



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English