2015-06-15 19 views
7

Ich brauche Menhir mit sedlex aus welchem ​​Grund auch immer (utf-8), aber ich weiß nicht, wie man den generierten Parser von Sedlexing anstelle von Lexing abhängig machen kann. Irgendwelche Tipps?Verwenden von Menhir mit Sedlex

Als ich

menhir --infer parser.mly 

das erzeugte Programm ausgeführt hat Linien mit Lexing.... Ich könnte es manuell ändern, aber es muss einen anderen Weg geben, nicht?

Antwort

2

EDIT: Die Parser.ml, die erzeugt wird, sollte Referenzen auf Lexing haben. Sedlexing wird verwendet, um die lexbuf zu erstellen, die Sie an den Parser senden, aber der Parser interessiert nicht, ob dieser Lexbuf von Lexing oder Sedlexing erstellt wurde, solange er Funktionen wie Lexing.lex_start_p und Lexing.lex_curr_p darauf verwenden kann.


habe ich so etwas wie

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

wo test.ml parser.mly zu Parser über Anrufe verwendet.


Zur Vollständigkeit der Befehl, der von ocamlbuild laufen gelassen wird:

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

ein vollständiges Beispiel finden Sie bei https://github.com/unhammer/ocaml_cg_streamparse (Zweig https://github.com/unhammer/ocaml_cg_streamparse/tree/match-singlechar-example zeigt eine Regel, die einen einzigen Codepunkt wie a oder ß passt aber nicht aa).

+0

Danke! Werde das versuchen und dann als Antwort markieren. –

+0

Ich habe versucht, den letzten Befehl auszuführen (ich benutze ocamlbuild nicht), aber der resultierende 'parser.ml' hängt immer noch von' Lexing' ab ... –

+0

Ich habe die Antwort aktualisiert - erklärt das das? – unhammer