2016-03-29 9 views
6

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?

risposta

4

Quindi la grammatica in Rakudo è abbastanza vicina a una grammatica Perl 6, ma è implementata al livello NQP https://github.com/rakudo/rakudo/blob/nom/src/Perl6/Grammar.nqp Quindi la magia di Grammar :: Tracer non funzionerà qui. Tuttavia, è possibile utilizzare la grammatica STD https://github.com/perl6/std/blob/master/STD.pm6 per analizzare un po 'di codice e che dovrebbe funzionare con Grammar :: Tracer, mi sono messo a trafficare cercando di farlo funzionare con Grammar :: Highlighter. Spero possa aiutare?

+0

Aiuta - e ho fatto +1 per l'indizio di usare STD - ma lascia aperto come ricostruire perl6 in modo che usi STD. – Marty

+1

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. –

Problemi correlati