2015-06-15 11 views
7

Ho bisogno di usare menhir con sedlex per qualsiasi motivo (utf-8), ma non so come fare il parser generato dipende da Sedlexing invece di Lexing. Qualche consiglio?Utilizzo di menhir con sedlex

Quando eseguo

menhir --infer parser.mly 

il programma generato ha linee con Lexing.... Potrei cambiarlo manualmente, ma ci deve essere un altro modo, no?

risposta

2

MODIFICA: il parser.ml generato deve avere con riferimenti a Lexing. Sedlexing viene utilizzato per creare il lexbuf che si invia al parser, ma al parser non interessa se quel lexbuf è stato creato da Lexing o Sedlexing, purché possa utilizzare su di esso funzioni come Lexing.lex_start_p e Lexing.lex_curr_p.


ho usato qualcosa come

ocamlbuild -use-menhir -tag thread -use-ocamlfind -quiet -pkg menhirLib \ 
    -pkg sedlex test.native 

dove test.ml utilizza parser.mly tramite chiamate a Parser.


Per completezza, il comando che è gestito da ocamlbuild è:

menhir --ocamlc 'ocamlfind ocamlc -thread -package sedlex -package menhirLib' \ 
    --explain --infer parser.mly 

Vedi un esempio completo in https://github.com/unhammer/ocaml_cg_streamparse (ramo https://github.com/unhammer/ocaml_cg_streamparse/tree/match-singlechar-example mostra una regola che corrisponde a un unico punto di codice come a o ß ma non aa).

+0

Grazie! Proverà questo e poi segnerà come risposta. –

+0

Ho provato a eseguire l'ultimo comando (non uso ocamlbuild), ma il parser.ml' risultante dipende ancora da 'Lessing' ... –

+0

Ho aggiornato la risposta - lo spiega? – unhammer