piszę niewielką parser z Menhir + Ocamllex i mam dwa warunki nie mogę wydają się spełniać jednocześniewiele raportów o błędach z menhir: jaki token?
- chciałbym zachować parsowania po błędzie (zgłosić więcej błędów).
- Chciałbym wydrukować token, w którym wystąpił błąd.
Mogę zrobić tylko 1) łatwo, używając tokena error
. Mogę też zrobić tylko 2) łatwo, stosując podejście sugerowane dla this question. Jednak nie znam łatwego sposobu na osiągnięcie obu.
Sposób obsługi błędów I teraz coś takiego:
pair:
| left = prodA SEPARATOR right = prodA { (* happy case *) }
| error SEPARATOR right = prodA { print_error_report $startpos;
(* would like to continue after the first error, just in case
there is a second error, so I report both *) }
Jedną rzeczą, która pomogłaby mi korzysta samego lexbuf, więc mogę dostać token bezpośrednio. Oznaczałoby to zamiast $startpos
przekazać coś jak$lexbuf
Ale o ile mogę powiedzieć, nie ma oficjalnego sposobu dostępu do lexbuf. Rozwiązanie w 1 działa tylko na poziomie wywołującego do analizatora składni, gdzie wywołujący sam przekazuje lexbuf t othe parser, ale nie w ramach akcji semantycznych.
Czy ktoś wie, czy jest rzeczywiście dostępny w jakiś sposób? a może obejście?