Blick auf Rakudo Perl6 Ich frage mich, ob es Techniken für Parsing und lexikalische Analysen gibt, die die Syntax der Sprache ändern/erweitern und die effizient und nicht schwer zu implementieren sind.Parsing-Techniken für die Laufzeit Sprachumstellung
Antwort
"Nein". [edit: zum Zeitpunkt der Frage] Wenn die Frage über das Lexing/Pars Perl ist, ist es ziemlich schwer. Wir (siehe meine Biographie für "wir") haben einen Perl5-Lexer. Wir haben wirklich gute Lexer-Generator-Tools (Unicode, Multi-State, Regexps komplett mit "nicht Regexp" eingebaut). Der Perl-Lexer war eine königliche Kopfschmerzen zu bauen; Wir haben so etwas wie 50 lexikalische Modi (jeder mit seinen eigenen Token-Definitionen), um den lexing Teil zu behandeln.
Wir starren auf den Parsing-Teil und heute sind wir glücklich und haben keine direkte Notwendigkeit, es zu tun, also haben wir das bisher vermieden. Offensichtlich ist die Sprache mehrdeutig, abhängig von den dynamischen Definitionen verschiedener Identifikatoren. Daher ist es nicht statisch entscheidbar, wie eine Phrase zu einem bestimmten Zeitpunkt interpretiert (analysiert) wird. Wir denken, dass wir es mit einem GLR-Parser machen können, der Mehrdeutigkeiten handhabt und einfach die Mehrdeutigkeiten als mögliche Laufzeitalternativen festhält. Ich werde dich in einigen Monaten wissen lassen.
Werfen Sie einen Blick auf PEGs. Es gibt Sprachen, die auf PEGs basieren (http://en.wikipedia.org/wiki/Parsing_expression_grammar), die erweiterbar sind, zum Beispiel:
http://www.chrisseaton.com/katahdin/
http://www.meta-alternative.net/mbase.html
Perl5 und Perl6 Grammatiken leicht in PEG Form definiert werden könnten (und ich könnte falsch sein , aber der aktuelle Perl6 wird höchstwahrscheinlich auf diese Weise implementiert).
- 1. Die Notwendigkeit für die Laufzeit-Speicheradresse verbindlich
- 2. Cleave einen berechneten Wert für die Laufzeit?
- 3. Spring-Konfiguration für die Laufzeit ändern
- 4. , was die Laufzeit für diesen Algorithmus ist
- 5. Berechnen Sie die Laufzeit für Spark sql
- 6. Laufzeit für Python
- 7. Maven Archetype für Glassfish Laufzeit
- 8. Laufzeit determinieren Typ für C++
- 9. Geben Sie die Objektdefinition für spring.net an XmlApplicationContext zur Laufzeit
- 10. Wie bekomme ich die Laufzeit für ein PHP-Skript?
- 11. getBoundingClientRect gibt Null für die Winkelanweisung zur Laufzeit aus
- 12. Suchen Sie die Zuordnungen für eine ActiveRecord-Klasse zur Laufzeit?
- 13. Wie kann ich die maximale Laufzeit für einen Komponententest begrenzen?
- 14. Die Begrenzung der Mono-Laufzeit
- 15. die Annotationsinformationen zur Laufzeit abrufen
- 16. So berechnen Sie die Laufzeit
- 17. Beliebige Zeiger auf die kleinste CLI-Laufzeit?
- 18. Laufzeit für eine AWS-Instanz abrufen
- 19. Android Laufzeit Berechtigung für externen Speicher
- 20. Laufzeit zu lang für GC Skew
- 21. Warum unterschreibt gprof die Laufzeit des Programms?
- 22. So ändern Sie die Ansicht zur Laufzeit
- 23. Me.Controls für Timer erklärt zur Laufzeit
- 24. Gebunden die Laufzeit einer Berechnung in Haskell
- 25. Hintergrund zeichnet schwarz auf die Laufzeit
- 26. Laufzeit Testdaten für Testscript in TestComplete
- 27. Ändern Schriftarten zur Laufzeit für Textview
- 28. ClassNotFoundException in Laufzeit, aber die Anwendung kompiliert
- 29. "Laufzeit-Vorlagen"
- 30. Hohe Laufzeit für Dictionary.Add für eine große Anzahl von Elementen
Diese Antwort bezieht sich auf Perl 5. Die Frage bezog sich auf Perl 6. Die Antwort für letzteres ist ein klares JA. Um zu sehen, wie tief das geht, schauen Sie sich diesen Blogbeitrag an, in dem die verbiegende P6-Syntax so weit diskutiert wird, dass [Sie könnten SQL innerhalb von P6 in HTML innerhalb von P6 einbetten] (http://strangelyconsistent.org/blog/macros-define-your- eigener-Literal-Tag). – raiph
@raiph: Ja, Sie haben Recht. Zu der Zeit, als dies geschrieben wurde, schien Perl6 viel nebulöser zu sein, so dass die Antwort aus einer Perspektive "außerhalb von Perl6" geschrieben wurde. Ich schlage vor, dass Sie Ihren Kommentar als Antwort hinzufügen. [Dies beweist, dass Antworten auf SO nicht dauerhaft sind; sie werden abgestanden]. –