2013-06-20 38 views
5

Tôi có ngữ pháp Marpa khá lớn (để phân tích cú pháp XPath) và tôi gặp sự cố với mã thông báo. Tôi tạo ra một ví dụ bẻ tối thiểu dưới đây:Mã thông báo không chính xác với Marpa

use strict; 
use warnings; 
use Marpa::R2; 

my $grammar = Marpa::R2::Scanless::G->new(
    { 
     source => \(<<'END_OF_SOURCE'), 
      :default ::= action => ::array 
      :start ::= Start 

      Start ::= Child DoubleColon Token 

      DoubleColon ~ '::' 
      Child ~ 'child' 
      Token ~ 
       word 
       | word ':' word 
      word ~ [\w]+ 

END_OF_SOURCE 
    } 
); 
my $reader = Marpa::R2::Scanless::R->new(
    { 
     grammar => $grammar, 
     trace_terminals => 1, 
    } 
); 

my $input = 'child::book'; 
$reader->read(\$input); 

Kịch bản này in như sau:

Registering character U+0063 as symbol 10: [[\w]] 
Registering character U+0063 as symbol 3: [[c]] 
Registering character U+0068 as symbol 10: [[\w]] 
Registering character U+0068 as symbol 4: [[h]] 
Registering character U+0069 as symbol 10: [[\w]] 
Registering character U+0069 as symbol 5: [[i]] 
Registering character U+006c as symbol 10: [[\w]] 
Registering character U+006c as symbol 6: [[l]] 
Registering character U+0064 as symbol 10: [[\w]] 
Registering character U+0064 as symbol 7: [[d]] 
Registering character U+003a as symbol 1: [[\:]] 
Rejected lexeme @0-5: Token; value="child" 
Accepted lexeme @0-5: Child; value="child" 
Registering character U+0062 as symbol 10: [[\w]] 
Error in SLIF G1 read: No lexeme found at position 6 
* String before error: child:: 
* The error was at line 1, column 8, and at character 0x0062 'b', ... 
* here: book 

Tôi muốn đầu vào được tokenized như [Child] [DoubleColon] [word]. Khi dấu vết đầu cuối hiển thị, chỉ có một ký tự đại tràng được đọc và xử lý. Có vẻ như nó cố gắng để tokenize sự bắt đầu của chuỗi như [word] [':'] [word] và thất bại một phần thông qua. Lỗi này sẽ không còn bị ném nếu bạn xóa dòng 10 của ngữ pháp (| word ':' word).

Tôi đã cố tạo ưu tiên cho DoubleColon (:lexeme ~ <DoubleColon> priority > 1), nhưng điều đó không hiệu quả. Ai đó có thể cho tôi biết phải làm gì để làm cho ngữ pháp này phân tích cú pháp chuỗi đầu vào chính xác không? Nó vẫn cần có khả năng phân tích cú pháp child::ns:book, v.v.

+0

Nếu bạn muốn kiểm tra điều này với bản sửa lỗi, hãy thử Marpa-R2 2.059_000 vừa tải lên: https://metacpan.org/release/JKEGL/Marpa-R2-2.059_000 –

+0

Tuyệt vời! Tôi không biết tại sao, nhưng tôi đã có vấn đề cài đặt nó bằng tay ('perl Build.PL', vv), nhưng cài đặt với' cpan' làm việc tốt. Bây giờ tôi có một trình phân tích cú pháp XPath đang hoạt động. Woohoo! –

+0

Tuyệt vời! Bản sửa lỗi sẽ được đưa vào bản phát hành CPAN được lập chỉ mục (đầy đủ, không phát triển) trong một vài ngày. –

Trả lời

7

Đây có vẻ là lỗi trong bản phát hành hiện tại 2.058 của Marpa :: R2. Lời xin lỗi của tôi và cảm ơn bạn đã viết cẩn thận vấn đề.

Tôi có bản sửa lỗi đã vượt qua bộ kiểm tra và tôi sẽ sớm có bản phát hành mới.

+1

Có! Cảm ơn bạn rất nhiều. –

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