2016-03-29 14 views
6

Để có được một ý tưởng như thế nào Perl6 phân tích mã của bạn, bạn có thể sử dụng tùy chọn --target:Cách dễ nhất để có được Grammar :: Tracer làm việc trên Perl6 là gì?

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

Viễn tốt hơn là Grammar::Tracer mô-đun mô tả here. Theo mô-đun documentation, người ta chỉ cần thêm use Grammar::Tracer và bất kỳ ngữ pháp nào được xác định trong phạm vi nơi câu lệnh sử dụng xuất hiện sẽ được truy tìm.

Câu hỏi của tôi đơn giản là: Nếu tôi đang sử dụng "star release", cách dễ nhất để truy tìm (sử dụng Grammar :: Tracer) trên chính Perl6 Grammar là gì?

Hoặc, nếu tôi đang sử dụng rakudobrew, cách dễ nhất để truy tìm chính bản thân Perl6 là gì?

Đó là recommended rằng người dùng perl6 sử dụng các phiên bản sao - mong muốn kiểm tra chặt chẽ hơn cách perl6 phân tích chính nó, bằng cách sử dụng Grammar :: Tracer, có giá trị xây dựng từ nguồn cục bộ thay thế không?

Trả lời

4

Vì vậy, ngữ pháp trong Rakudo là đủ gần một ngữ pháp Perl 6, nhưng nó được thực hiện ở cấp NQP https://github.com/rakudo/rakudo/blob/nom/src/Perl6/Grammar.nqp Vì vậy, sự kỳ diệu của Grammar :: Tracer sẽ không hoạt động ở đây. Tuy nhiên, bạn có thể sử dụng ngữ pháp STD https://github.com/perl6/std/blob/master/STD.pm6 để phân tích cú pháp một số mã và nên làm việc với Grammar :: Tracer, tôi đã không quan tâm đến việc cố gắng làm cho nó hoạt động với Grammar :: Highlighter. Hy vọng rằng sẽ giúp?

+0

Nó giúp ích - và tôi đã +1 cho đầu mối để sử dụng STD - nhưng nó lá mở làm thế nào để xây dựng lại perl6 như vậy mà nó sử dụng STD. – Marty

+1

Vì vậy, bạn không muốn truy tìm Perl 6 nhưng truy tìm bước phân tích Rakudos khi nó đang thực hiện? --target = parse về cơ bản là nếu bạn nhìn vào liên kết ngữ pháp đầu tiên tôi đưa ra và đầu ra của bạn. Bạn có thể sử dụng Grammar.parse() với STD để phân tích cú pháp một số mã bên ngoài bước biên dịch - bạn có thể theo dõi - nhưng nó không nhất thiết phản ánh những gì Rakudo đang làm. Nếu bạn đi trên kênh IRC# perl6 trên freenode họ có thể có một số gợi ý tốt hơn. –

Các vấn đề liên quan