On Mar 7, 2009, at 11:21 PM, Matthieu Wipliez wrote:

why are you using stream parsers instead of Camlp4 grammars ?

Because I don't know any better? I'm just starting out, really.

I have a parser that I wrote using ocamlyacc and menhir. I finally when with dypgen and didn't touch the code for a few months. I then tried to simplify the grammar on account of a later type checking pass and realized that I cannot troubleshoot it.

I think I can make do with a camlp4 parser and it will vastly simplify debugging.

This:
...
could be written as:
expression: [
 [ (i, _) = INT -> Int i
 | (s, _) = STRING -> Str s
 ... ]
];

Doesn't your example assume that I'm using the camlp4 lexer?

expression: [
 [ e1 = SELF; "/"; e2 = SELF ->
   if e2 = Int 0 then
     Loc.raise _loc (Failure "division by zero")
   else
     BinaryOp (e1, Div, e2) ]
];

Where does SELF above come from?

Can I use a token instead of "/" since I return SLASH whenever "/" is found by the lexer.

By the way, do you need you own tailor-made lexer? Camlp4 provides one that might satisfy your needs.

It has been said that it's not extensible so I wrote my own lexer using ocamllex and wrapped it to return (tok, loc) Stream.t.

Otherwise, you can always define your own lexer (I had to do that for the project I'm working on, see file attached).

Thanks, I'll study it.


Your parser would then look like

(* functor application *)
module Camlp4Loc = Camlp4.Struct.Loc
module Lexer = Cal_lexer.Make(Camlp4Loc)
module Gram = Camlp4.Struct.Grammar.Static.Make(Lexer)

Is this extending the OCaml grammar or starting with an "empty" one?

(* rule definition *)
let rule = Gram.Entry.mk "rule"

Is this the "start" rule of the parser?

        Thanks, Joel

---
http://tinyco.de
Mac, C++, OCaml



_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to