Sono molto nuovo in Perl e voglio creare un linguaggio specifico per il dominio con operatori che hanno la precedenza usando le nuove caratteristiche grammaticali di Perl 6. Ad esempio per analizzare "1 + 2 * 6" nel modo corretto.Esempio di grammatica Perl 6 con regole di precedenza per l'operatore
La documentazione che ho trovato fino ad ora (ad esempio this) non ha esempi con regole grammaticali per gli operatori con dichiarazioni di precedenza.
ho questo esempio molto semplice
use v6;
#use Grammar::Tracer;
grammar TestGrammar {
token TOP {
<digit> <infix> <digit>
}
token infix:sym<times> is equiv(&infix:<*>) { <sym> }
}
sub MAIN() {
my $text = "1 times 2" ;
say $text ;
my $match = TestGrammar.parse($text);
say $match;
}
Questo mi dà
No such method 'infix' for invocant of type 'TestGrammar'
Voglio solo di costruire un albero di sintassi astratta.
Sì, questo è l'approccio standard che speravo di evitare. Alla fine volevo definire molti dei miei operatori (postcircumfix, list, ecc.) E pensavo che perl potesse gestirlo. Sai se lo stesso vale per [Parrot Grammar Engine] (http://docs.parrot.org/parrot/latest/html/docs/book/pct/ch04_pge.pod.html)? – user2660278
Da ciò che Perl6 eredita HLL :: Grammar da nqp, che potrebbe essere adatto anche a te. Puoi anche provare a chiedere sull'aggiornamento Perl 6 irc - http://perl6.org/community/irc – dwarring
: ora ci sono alcuni documenti e esempi pratici per implementare gli HLL e le lingue specifiche del dominio usando la catena di strumenti NQP! Vedi http://edumentab.github.io/rakudo-and-nqp-internals-course/slides-day1.pdf. Gli esempi di lavoro iniziano intorno a pp 118 – dwarring