Was ist in einem Perl 6-Bezeichner erlaubt?

8

Synopsis 2 sagt:

  

Ein Bezeichner besteht aus einem alphabetischen Zeichen gefolgt von einer beliebigen Folge von alphanumerischen Zeichen. Die Definitionen von alphabetisch und numerisch umfassen geeignete Unicode-Zeichen. Underscore wird immer als alphabetisch betrachtet. Ein Bezeichner kann auch isolierte Apostrophe oder Bindestriche enthalten, vorausgesetzt, das nächste Zeichen ist alphabetisch.

Syntax in der Dokumentation zu Perl 6 sagt:

  

Bezeichner sind ein grammatikalischer Baustein, der an mehreren Stellen auftritt. Ein Bezeichner ist ein primitiver Name und muss mit einem alphabetischen Zeichen (oder einem Unterstrich) beginnen, gefolgt von null oder mehr Wortzeichen (alphabetisch, Unterstrich oder Zahl). Sie können auch Bindestriche - oder einfache Anführungszeichen - in die Mitte einbetten, aber nicht zwei hintereinander.

Der Begriff "passendes Unicode-Zeichen" wirft die Frage auf, dass wir wissen, was angemessen ist.

Ich finde das zu vage, wenn ich jenseits von ASCII-Zeichen wähle. Ich finde in Perl6 :: Grammatik diese Produktion, aber nicht die Definition für <.ident> :

%Vor%

Aber das wirft auch die Frage auf, dass Sie wissen müssen, was ein Bezeichner ist, um einen Bezeichner zu definieren. Also, wo ist <.ident> ?

raiph weist darauf hin, dass <.ident> die Methode ident in QRegex::Cursor ist, aber das definiert sie in nqp::const::CCLASS_WORD . Jetzt muss ich das aufspüren.

Ich habe versucht, U + 00B2 (SUPERSCRIPT TWO) zu verwenden (Allgemeine Kategorien No, Other_Number), weil ich das Ergebnis einer teuren quadratischen Operation weitergeben wollte, und hey, Perl 6 soll das erlauben:

%Vor%

Aber es stellt sich heraus, dass ² zusammen mit den anderen hochgestellten Zeichen Operatoren sind. Das ist in Ordnung, aber ² und ähnliches sind nicht als als Operator oder in Int oder dem Verhalten Int aufgeführt. erbt:

%Vor%

Aber ich kann nicht ½ U + 00BD (VULGAR FRACTION ONE HALF) verwenden (allgemeine Kategorien von No und Other_Number):

%Vor%

Aber was ist, wenn ich keine Zahl in lege?

%Vor%

im Block bei -e Zeile 1

%Vor%

im Block bei -e Zeile 1

Ich war besorgt, dass jemand, der einen Postfix-Operator definiert, die Sprache sprengen könnte, aber das scheint zu funktionieren:

%Vor%

Also, was ist dort los?

    
brian d foy 09.01.2016, 04:59
quelle

1 Antwort

8

Die Grammatik hat eine ID definiert als

%Vor%

mit ident a Methode für Cursor , die Eingaben akzeptiert Das beginnt mit einem CCLASS_ALPHABETIC -Zeichen oder einem Unterstrich _ und setzt sich fort mit null oder mehr CCLASS_WORD -Zeichen.

Diese Klassen sind in MoarVM implementiert und werden verschiedenen Unicode-Karten zugeordnet Kategorien.

Insbesondere überprüft CCLASS_ALPHABETIC auf Letter, Kleinbuchstaben ; Buchstabe, Großbuchstabe ; Brief, Titelsatz ; Letter, Modifier und Letter, Other .

CCLASS_WORD akzeptiert zusätzlich Zeichen der Kategorie Zahl, Dezimalziffer sowie Unterstriche.

Warum Postfix-Operatoren keine Identifikatoren brechen, liegt an der längsten Token-Übereinstimmung.

Wenn Sie einen Postfix-Operator Δ für eine Variable aufrufen wollen, müssen Sie einen Backslash hinzufügen, zB

%Vor%

oder ein 'unspace'

%Vor%     
Christoph 09.01.2016, 12:22
quelle

Tags und Links