2016-03-29 40 views
6

Aby zorientować się jak perl6 analizuje kod można użyć opcji --target:Jaki jest najłatwiejszy sposób na uzyskanie Grammar :: Tracer pracującego nad samym Perl6?

$ 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> 
$ 

Znacznie lepiej jest moduł Grammar::Tracer opisane here. Zgodnie z modułem documentation, po prostu dodaje się use Grammar::Tracer i dowolną gramatykę zdefiniowaną w zakresie, w którym pojawia się instrukcja użycia.

Moje pytanie brzmi po prostu tak: Jeśli używam "star release", jaki jest najłatwiejszy sposób śledzenia (za pomocą Grammar :: Tracer) w samej Gramacie Perl6?

Ewentualnie, jeśli używam rakudobrew, jaki jest najłatwiejszy sposób śledzenia samej gramatyki Perl6?

To jest recommended, że użytkownicy perl6 używają wersji gwiezdnych - czy chcielibyśmy dokładniej przyjrzeć się, jak perl6 sam się parsuje, używając Grammar :: Tracer, zamiast tego warto budować z lokalnego źródła?

Odpowiedz

4

Tak więc gramatyka w Rakudo jest wystarczająco blisko gramatyki Perla 6, ale jest zaimplementowana na poziomie NQP https://github.com/rakudo/rakudo/blob/nom/src/Perl6/Grammar.nqp Tak więc magia Grammar :: Tracer nie będzie działać tutaj. Możesz jednak użyć gramatyki STD https://github.com/perl6/std/blob/master/STD.pm6, aby przeanalizować kod i który powinien działać z Grammar :: Tracer, błądziłem próbując uruchomić go z Grammar :: Highlighter. Nadzieja, która pomaga?

+0

Pomaga - a ja dałem +1, by użyć STD - ale pozostawia to otwartą możliwość odbudowania perl6, tak, że używa STD. – Marty

+1

Więc nie chcesz śledzić Perl 6, ale śledzenie Rakudos parsować krok, jak to robi? --target = parsowanie jest zasadniczo takie, jeśli spojrzysz na pierwszy link gramatyczny, który dałem i twoje wyjście. Możesz użyć Grammar.parse() ze STD, aby parsować jakiś kod poza etapem kompilacji - który możesz śledzić - ale to niekoniecznie odzwierciedla to, co robi Rakudo. Jeśli przejdziesz na kanał IRC# perl6 na serwerze freenode, mogą mieć lepsze sugestie. –