Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen. Übersicht und Zusammenfassung

Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen

Inkrement in CPython implementiert. Dieses Mal werde ich den Umriss des Inkrements und die erzielten Ergebnisse vorstellen. In der nächsten Implementierungsausgabe werden wir uns die Implementierungsmethode in chronologischer Reihenfolge ansehen.

Linkliste

Alle drei Male plus zusätzliche Ausgabe. Übersicht und Zusammenfassung des Hinzufügens von Post-Inkrement zu CPython [Ich habe versucht, CPython [Implementierung] ein Post-Inkrement hinzuzufügen (http://qiita.com/DOSS_INCREMENT/items/8b050847145f635211e2) Liste aller Änderungen, die durch Hinzufügen eines Post-Inkrements zu CPython vorgenommen wurden Zusätzliche Ausgabe zum Hinzufügen von Post-Inkrement zu CPython

rutschen

Bitte haben Sie zunächst eine kurze Zusammenfassung der Ergebnisse Folie.

Spezifikation

Es funktioniert so.


>>> i=0
>>> i++
0
>>> i
1


>>> lst=[x for x in range(5)]
>>> lst
[0, 1, 2, 3, 4]
>>> lst[0]++
0
>>> lst
[1, 1, 2, 3, 4]

>>> class cls:
...     a=5
...
>>> cls_obj=cls()
>>> cls_obj.a
5
>>> cls_obj.a++
5
>>> cls_obj.a
6

Inkrement kann nicht nur für Variablen, sondern auch für Listen und Mitgliedsvariablen implementiert werden. Außerdem wird die Auswertung gleichzeitig mit dem Umschreiben der Variablen zurückgegeben.

Ergebnisse erhalten

Folgendes habe ich beim Betrachten des CPython 3.5.0-Quellcodes bei der Implementierung von Inkrementen gefunden.

Über den Betrieb von CPython

Das Python-Skript wird wie folgt ausgeführt.

So ändern Sie die Python-Syntax

Im Python-Entwicklerhandbuch finden Sie eine Seite mit dem Namen 23. Ändern der CPython-Grammatik, auf die Sie verweisen können. Das ist jedoch nicht genug, deshalb habe ich einige spezifischere Änderungen zusammengefasst.

  1. Wenn Sie das reservierte Wort in ein anderes Wort ändern möchten, z. B. "Ich möchte für jedes Wort anstelle von für schreiben".
  1. Wenn Sie eine Zeichenfolge verwenden möchten, die in Python nicht verwendet wird, z. B. "Ich möchte verwenden können! Statt für".
  1. Wenn Sie eine Grammatik hinzufügen möchten, die Symbole verwendet, die bereits in anderen Bedeutungen verwendet werden -Beispiel: Listeneinschlussnotation[x + 1 | x <- range(10)]Ändern, um schreiben zu können (|Wird bereits im Sinne von Bit ODER verwendet) -Da die geschnitzten Token nacheinander an den automatisch generierten Parser übergeben werden, wird die Bitoperation zum Zeitpunkt davor ausgeführt.|Oder Listeneinschlussnotation|Ich dachte, es wäre gut zu beurteilen, ob es so ist, aber ich gab auf, weil es einige Zeit dauern würde, dies von Grund auf neu zu machen. ――Ich denke, es sollte in erster Linie vom Parser durchgeführt werden, aber ist die Python-Grammatik, die ursprünglich LL (1) ist, nicht mehr LL (1)? → Es scheint notwendig, den Teil der automatischen Generierung des Parsers zu lesen, den ich nicht berührt habe, und die Fähigkeit des Parsers zu kennen
  1. Wenn Sie eine Zuckerbeschichtungssyntax definieren möchten
  1. Wenn Sie eine Syntax hinzufügen möchten, die über den Rahmen von Ausdrücken und Sätzen hinausgeht oder in vorhandenen nicht vorhanden ist --tokenizer, Grammatik, .. Manchmal sollte compile.c auch netten Bytecode ausspucken. Definieren Sie gegebenenfalls auch einen neuen Operationscode und dessen Interpretation

Übrigens, wenn Sie eine destruktive Änderung an einer Melodie vornehmen, können Sie die Bibliothek zum Zeitpunkt der Installation nicht kompilieren.

In dieser Inkrement-Implementierung gab es mindestens einen Ausdruck "++ 2" und es wurde ein Fehler ausgegeben (es ist ein Rätsel, warum er überhaupt so geschrieben wurde).


compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated
if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
while_stmt: 'while' test ':' suite ['else' ':' suite]
for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]

Recommended Posts

Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen. Übersicht und Zusammenfassung
Ich habe versucht, der CPython-Implementierung ein Post-Inkrement hinzuzufügen
Ich habe versucht, der CPython Extra Edition ein Post-Inkrement hinzuzufügen
Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen. Liste aller Änderungen
Ich habe versucht, Linux Systemaufrufe und Scheduler hinzuzufügen
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 1: Übersicht
Ich habe DCGAN implementiert und versucht, Äpfel zu generieren
Ich habe versucht, der ConoHa ~ SSH-Verbindung VPS hinzuzufügen
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Ich habe versucht zu debuggen.
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, Scrapy auf Anaconda zu installieren und konnte es nicht
Ich habe versucht, PredNet zu lernen
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, SparseMatrix zusammenzufassen
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, Discord Bot und Gesichtserkennung für LT zu kombinieren.
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
[Einführung in das Modell der Infektionskrankheiten] Ich habe versucht, zu passen und zu spielen ♬
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, die Lesezeichen zu visualisieren, die mit Doc2Vec und PCA nach Slack fliegen
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe versucht, Pepper über Ereignisinformationen und Mitgliederinformationen sprechen zu lassen
Ich habe versucht, Pytorchs Datensatz zu erklären
Ich habe Watson Voice Authentication (Speech to Text) ausprobiert.
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe Teslas API berührt
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, mich über MCMC zu organisieren.
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
Ich habe versucht, Spieler- und Fertigkeitsnamen aus Sportartikeln zu extrahieren
Ich habe versucht, Realness GAN zu implementieren
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, das Bild durch Klicken mit der rechten und linken Maustaste in den angegebenen Ordner zu verschieben
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
[Deep Learning von Grund auf neu] Ich habe versucht, Sigmoid Layer und Relu Layer zu implementieren
Ich habe versucht, datetime <-> string mit tzinfo mit strftime () und strptime () zu konvertieren.
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, Kanas handschriftliche Zeichenerkennung durchzuführen. Teil 2/3 Datenerstellung und Lernen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
[Markov-Kette] Ich habe versucht, Zitate und negative Emotionen in Python einzulesen.
Ich habe versucht, Oba Hanana und Otani Emiri durch tiefes Lernen zu klassifizieren
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt