Per avere un'idea di come perl6 analizza il codice, è possibile utilizzare l'opzione --target
:Qual è il modo più semplice per ottenere Grammar :: Tracer lavorando su Perl6 stesso?
$ perl6 --target=parse -e '"Hello World".say'
- statementlist: "Hello World".say
- statement: 1 matches
- EXPR: .say
- 0: "Hello World"
- value: "Hello World"
- quote: "Hello World"
- nibble: Hello World
- OPER: .say
- sym: .
- dottyop: say
- methodop: say
- longname: say
- name: say
- identifier: say
- O: <object>
- dotty: .say
- sym: .
- dottyop: say
- methodop: say
- longname: say
- name: say
- identifier: say
- O: <object>
$
Molto meglio è il modulo Grammar::Tracer
descritto here. In base al modulo documentation, si aggiunge semplicemente use Grammar::Tracer
e qualsiasi grammatica definita nell'ambito in cui verrà visualizzata l'istruzione di utilizzo.
La mia domanda è semplicemente questa: Se sto usando un "star release", qual è il modo più semplice per ottenere traccia (usando Grammatica :: Tracciatore) nella stessa Perl6 Grammar?
In alternativa, se sto usando rakudobrew, qual è il modo più semplice per ottenere la traccia sulla grammatica Perl6 stessa?
E 'recommended che gli utenti utilizzano Perl6 stelle stampa - sarebbe il desiderio di esaminare più da vicino come perl6 si analizza, utilizzando grammatica :: Tracer, la pena di compilare i sorgenti a livello locale, invece?
Aiuta - e ho fatto +1 per l'indizio di usare STD - ma lascia aperto come ricostruire perl6 in modo che usi STD. – Marty
Quindi non vuoi tracciare Perl 6 ma tracciare il passo di Rakudos mentre lo sta facendo? --target = parse è essenzialmente questo se si guarda il primo link di grammatica che ho dato e il tuo output. È possibile utilizzare Grammar.parse() con STD per analizzare un codice al di fuori del passo di compilazione, che è possibile tracciare, ma non necessariamente riflette ciò che Rakudo sta facendo. Se vai sul canale IRC# perl6 su freenode, potrebbero avere alcuni suggerimenti migliori. –