Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
parsing problem.
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-01-23 (23:56)
From: Pietro Abate <Pietro.Abate@a...>
Subject: parsing problem.
hi all,
I've a file that is composed of two parts: a language specification and
a program that is written using the language specified in the first
part. My goal is to parse the language spec, create a parser that uses
this language, parse the rest of the file and output ocaml code (this
should be a preprocessor).

At the moment I'm using camlp4 to read the language specification,
extend a simple fixed grammar on the fly and to parse the rest of the
file using the grammar that I've extended with the language
specification. For example if my fix grammar is a simple generic
calculator language and I want to add more operators to the language
I'll write something along these lines:

_+_ , 2
_*_ , 1
-_  , 0

and then then the second part of the file will look like

1 + 2 * -3 

and I expect that this line will be parsed accordingly to the operators
declared at the beginning.

Obviously this approach is not going to take me very far way. In the
moment I need to specify a different grammar (say to write equations)
I've to change the parser in the preprocessor.

What I really want is to write the grammar and lexer specification in
the first part of my file and then use a parser generator to create a
parser to interpret the second part of the file. The catch is that I'd
like to do it in one pass. Using Lex/Yacc technology this is not
possible (I think) as you need to write two input files in order to
generate a parser library. I'm wondering if this is possible using a
generic parser combinators library.

The idea would be to link a generic parser library and bootstrap my
custom parser by feeding it with the grammar specification and then use
this parser within or together with camlp4 to parse the rest of the

The result of this pre-processing step should be ocaml code that I'll
just need to compile.
input -> campl4 extension + generic parser library -> ocaml code

Is there a (small !) library to achieve this ?

I had a quick look at 

Ocfgc ( can it be
used in this way ? 

( seems also promising, 
but I'm not sure if it is possible to plug it in this way.

ulex ? menhir ?  dypgen ?

thanks :)

++ Blog:
++ "All great truths begin as blasphemies." -George Bernard Shaw
++ Please avoid sending me Word or PowerPoint attachments.