Ich arbeite an regulären Hausaufgaben, wo eine Frage ist:
Verwenden Sie Online-Sprachreferenzhandbücher, um die regulären Ausdrücke für ganzzahlige numerische Konstanten und Bezeichner für Java, Python, Perl und C zu bestimmen.
Ich brauche keine Hilfe beim regulären Ausdruck, ich habe einfach keine Ahnung, wie Bezeichner in Perl aussehen. Ich habe Seiten gefunden, die gültige Bezeichner für C , Python und Java , aber ich kann nichts über Perl finden.
BEARBEITEN: Um zu verdeutlichen, sollte die Suche nach der Dokumentation einfach sein (z. B. eine Google-Suche nach Python-IDs ). Ich nehme keine Klasse in "Google-Suchen".
Integer-Konstanten in Perl können
sein^0x
beginnen
^0b
beginnen
0
beginnen
Diesem Anführer folgt eine beliebige Anzahl gültiger Ziffern in dieser Basis und optional auch Unterstriche .
Beachten Sie, dass die Ziffer nicht \p{POSIX_Digit}
bedeutet; es bedeutet \p{Decimal_Number}
, das ist wirklich ziemlich anders, weißt du.
Bitte beachten Sie, dass ein vorangestelltes Minuszeichen nicht Teil der Integer-Konstante ist, was leicht bewiesen werden kann durch:
%Vor% Sehen Sie die 3 const
und viel später den negate
Op-Code? Das sagt Ihnen einen Haufen, einschließlich einer Kuriosität des Vorrangs.
Identifizierer, die über symbolische Dereferenzierung spezifiziert wurden, haben keinerlei Einschränkungen für ihre Namen.
100->(200)
die Funktion 100
mit den Referenzen (100, 200)
auf. ${"What’s up, doc?"}
auf die skalare Paketvariable mit diesem Namen im aktuellen Paket. ${"What's up, doc?"}
auf die skalare Paketvariable, deren Name ${"s up, doc?"}
ist und die nicht im aktuellen Paket ist, sondern im What
-Paket. Nun, es sei denn, das aktuelle Paket ist natürlich das Paket What
. Similary $Who's
ist die Variable $s
im Paket Who
. Man kann auch Bezeichner der Form ${^
Bezeichner }
; Diese werden nicht als symbolische Dereferenzierung in die Symboltabelle angesehen.
Bezeichner mit nur einem einzelnen Zeichen können ein Interpunktionszeichen sein, einschließlich $$
oder %!
.
Identifizierer können auch die Form $^C
haben, die entweder ein Steuerzeichen oder ein Zirkumflex ist, gefolgt von einem Nicht-Steuerzeichen.
Wenn keines dieser Dinge wahr ist, folgt ein (nicht vollständig qualifizierter) Bezeichner den Unicode-Regeln für Zeichen mit den Eigenschaften ID_Start
gefolgt von denen mit der Eigenschaft ID_Continue
. Es überschreibt dies jedoch, indem es all-digit Bezeichnern und Bezeichnern erlaubt, die mit einem Unterstrich beginnen (und vielleicht nichts anderes mehr haben). Sie können im Allgemeinen so tun (aber es ist wirklich nur das Vortäuschen), dass das ist, wie \w+
zu sagen, wobei \w
wie in Anhang C der UTS # 18 . Das heißt, alles, was eines davon hat:
[0-9]
ist
Also entweder ^\d+$
oder sonst
sollte es für die wirklich einfachen tun, wenn Sie nicht die Komplexität der Unicode ID_Start und ID_Continue Eigenschaften erkunden wollen. So ist es wirklich gemacht, aber ich wette, dein Lehrer weiß das nicht. Vielleicht soll man es ihm nicht sagen, wie?
Aber Sie sollten die nicht einfachen, die ich früher beschrieben habe, abdecken.
Und wir haben noch nicht über Pakete gesprochen.
Abgesehen von diesen einfachen Regeln müssen Sie auch berücksichtigen, dass Bezeichner mit einem Paketnamen qualifiziert werden können, und die Paketnamen selbst folgen den Regeln der Bezeichner.
Das Paket-Trennzeichen ist entweder ::
oder '
nach Belieben.
Sie müssen kein Paket angeben, wenn es sich um die erste Komponente in einem vollständig qualifizierten Bezeichner handelt. In diesem Fall bedeutet dies das Paket main
. Das bedeutet, dass Dinge wie $::foo
und $'foo
äquivalent zu $main::foo
sind, und isn't_it()
entspricht isn::t_it()
. (Tippfehler entfernt)
Schließlich ist als Sonderfall ein abschließender doppelter Doppelpunkt (aber kein einfaches Anführungszeichen) am Ende eines Hash erlaubt, und dies bezieht sich dann auf die Symboltabelle dieses Namens.
Somit ist %main::
die main
Symboltabelle, und weil Sie main weglassen können, ist auch %::
.
Mittlerweile ist %foo::
die foo
Symboltabelle, ebenso wie %main::foo::
und auch %::foo::
, nur um der Perversität willen.
Es ist schön zu sehen, dass Ausbilder Menschen nicht-triviale Aufgaben geben. Die Frage ist, ob der Ausbilder erkannte, dass es nicht trivial war. Wahrscheinlich nicht.
Und es ist auch kaum nur Perl. Haben Sie bei den Java-Identifikatoren herausgefunden, dass die Lehrbücher noch liegen? Hier ist die Demo:
%Vor% Ja, es ist wahr. Dies gilt auch für viele andere Codepunkte, insbesondere wenn Sie -encoding UTF-8
in der Kompilierzeile verwenden.Ihre Aufgabe ist es, das Muster zu finden, das diese erschreckend unerbittlichen Java-Identifikatoren beschreibt. Hinweis: Stellen Sie sicher, dass der Codepunkt U + 0000 enthalten ist.
Bist du nicht froh, dass du gefragt hast? Hoffe das hilft. Oder so. ☺
Die Hausaufgabe verlangt, dass Sie die Referenzhandbücher verwenden, also werde ich in diesen Begriffen antworten.
Die Perl-Dokumentation ist verfügbar unter Ссылка . Der Abschnitt, der sich mit Variablen beschäftigt, ist perldata. Das wird Ihnen leicht eine brauchbare Antwort geben.
In Wirklichkeit bezweifle ich, dass die vollständige Antwort in der Dokumentation verfügbar ist. Es gibt spezielle Variablen (siehe perlvar) und "utf8;" kann die Definition von "Buchstaben" und "Zahl" stark beeinflussen.
%Vor%[Ich habe nur den Bezeichner Teil abgedeckt. Ich habe gerade bemerkt, dass die Frage größer ist als das]
Die perlvar-Seite der Perl-Dokumentation hat einen Abschnitt am Ende grob skizziert die zulässige Syntax. Zusammenfassend:
::
(oder '
), sofern sie mit einem Buchstaben oder Unterstrich beginnt. ^W
. Beachten Sie, dass die meisten anderen Kennungen als die in Gruppe 1 von Perl eine besondere Bedeutung erhalten oder reserviert sind und in späteren Versionen eine besondere Bedeutung erhalten. Aber wenn Sie nur versuchen herauszufinden, was ein gültiger Bezeichner ist, dann ist das in Ihrem Fall nicht wirklich wichtig.
Wenn Sie keine offizielle Spezifikation haben (Perl ist was auch immer der Perl-Interpreter parsen kann), kann das ein wenig schwierig zu erkennen sein.
Diese Seite enthält Beispiele für alle Ganzzahlkonstantenformate. Das Format der Bezeichner muss von verschiedenen Seiten in perldoc abgeleitet werden.
Tags und Links perl unicode identifier