From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id 87828BB9C for ; Thu, 24 Nov 2005 07:13:32 +0100 (CET) Received: from x86unx3.comp.nus.edu.sg (x86unx3.comp.nus.edu.sg [137.132.80.24]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id jAO6DUiV019560 for ; Thu, 24 Nov 2005 07:13:31 +0100 Received: from e500d.comp.nus.edu.sg (e500d.comp.nus.edu.sg [137.132.90.69]) by x86unx3.comp.nus.edu.sg (8.9.1-20030924/8.9.1) with SMTP id OAA23266; Thu, 24 Nov 2005 14:13:16 +0800 (GMT-8) Received: from sn40.comp.nus.edu.sg(137.132.80.15) by e500d.comp.nus.edu.sg via csmap id ccd26066_5cb1_11da_8794_0030482985c3_6522; Thu, 24 Nov 2005 14:16:07 +0800 (SGT) Received: from zhuping ([172.18.178.75]) (authenticated bits=0) by sn40.comp.nus.edu.sg (8.13.1/8.13.1) with ESMTP id jAO6Cnv1025400 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 24 Nov 2005 14:12:50 +0800 (SGT) Message-ID: <438559DC.5020906@comp.nus.edu.sg> Date: Thu, 24 Nov 2005 14:12:44 +0800 From: Zhu Ping User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Fedora/1.7.8-2 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Gerd Stolpmann Cc: matthieu.dubuget@laposte.net, caml-list@yquem.inria.fr, Anil Madhavapeddy Subject: Re: [Caml-list] Using Frontc References: <002c01c5edae$afd08d20$1db312ac@comp.nus.edu.sg> <43806DF3.1000806@laposte.net> <000e01c5ee77$724858b0$1db312ac@comp.nus.edu.sg> <4373.192.168.1.2.1132566896.squirrel@gps.dynxs.de> In-Reply-To: <4373.192.168.1.2.1132566896.squirrel@gps.dynxs.de> Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit X-Miltered: at concorde with ID 43855A0A.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; caml-list:01 gerd:01 stolpmann:01 stdout:01 accum:01 accum:01 compilation:01 ocamlc:01 lib:01 ocaml:01 ocamlc:01 lib:01 ocaml:01 cmo:01 parsing:01 X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.0.3 Dear Gerd Stolpmann Thank you very much for recommending GODI. I have successfully installed GODI, compiled and linked my code with the FrontC library. My main program *main.ml* is as following: open Frontc let parse_result = Frontc.parse_file "/home/dreamer/code/sample1.c" stdout;; The sample C code sample1.c is: int main(int base, int expon) { int accum = 1; while (expon > 0) { accum = base * accum; expon = expon - 1; } return(accum); } I performed the compilation and linking by executing the following two commands: ocamlc -c -I /opt/godi/lib/ocaml/pkg-lib/FrontC main.ml ocamlc -o main /opt/godi/lib/ocaml/std-lib/unix.cma -I /opt/godi/lib/ocaml/pkg-lib/FrontC frontc.cma main.cmo To display the parsing result explicitly I built my toplevel: ocamlmktop -o mytoplevel /opt/godi/lib/ocaml/std-lib/unix.cma -I /opt/godi/lib/ocaml/pkg-lib/FrontC frontc.cma ./mytoplevel #directory "/home/dreamer/code/";; #directory "/opt/godi/lib/ocaml/pkg-lib/FrontC/";; #use "main.ml";; The output is: /home/dreamer/code/sample1.c[1] Invalid symbol: int main(int base, int expon) /home/dreamer/code/sample1.c[2] Invalid symbol: { /home/dreamer/code/sample1.c[3] Invalid symbol: int accum = 1; /home/dreamer/code/sample1.c[4] Invalid symbol: while (expon > 0) { /home/dreamer/code/sample1.c[5] Invalid symbol: accum = base * accum; /home/dreamer/code/sample1.c[6] Invalid symbol: expon = expon - 1; /home/dreamer/code/sample1.c[7] Invalid symbol: } /home/dreamer/code/sample1.c[8] Invalid symbol: return(accum); /home/dreamer/code/sample1.c[9] Invalid symbol: } val parse_result : Frontc.parsing_result = PARSING_OK [Cabs.FUNDEF ((Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), Cabs.NO_STORAGE, ("main", Cabs.PROTO (Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), [(Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), Cabs.NO_STORAGE, ("base", Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), [], Cabs.NOTHING)); (Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), Cabs.NO_STORAGE, ("expon", Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), [], Cabs.NOTHING))], false), [], Cabs.NOTHING)), ([Cabs.DECDEF (Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), Cabs.NO_STORAGE, [("accum", Cabs.INT (Cabs.NO_SIZE, Cabs.NO_SIGN), [], Cabs.CONSTANT (Cabs.CONST_INT "1"))])], Cabs.SEQUENCE (Cabs.WHILE (Cabs.BINARY (Cabs.GT, Cabs.VARIABLE "expon", Cabs.CONSTANT (Cabs.CONST_INT "0")), Cabs.BLOCK ([], Cabs.SEQUENCE (Cabs.COMPUTATION (Cabs.BINARY (Cabs.ASSIGN, Cabs.VARIABLE "accum", Cabs.BINARY (Cabs.MUL, Cabs.VARIABLE "base", Cabs.VARIABLE "accum"))), Cabs.COMPUTATION (Cabs.BINARY (Cabs.ASSIGN, Cabs.VARIABLE "expon", Cabs.BINARY (Cabs.SUB, Cabs.VARIABLE "expon", Cabs.CONSTANT (Cabs.CONST_INT "1"))))))), Cabs.RETURN (Cabs.VARIABLE "accum"))))] Why the parsing result is correct in the presence of lexing errors? Thank you very much for your help:) Gerd Stolpmann wrote: >>The pity now is the CIL format seems too complicated for me. I like the data structure defined in an earlier version of FrontC >>(http://casse.hugues.free.fr/projects/frontc.html) better:). However I still have problems in compiling FrontC sources downloaded from the site >>http://casse.hugues.free.fr/projects/frontc.html. Did anyone successfullyinstall FrontC in Linux/Unix? >> >> >FrontC is available in GODI, http://godi.ocaml-programming.de. This is probably the simplest way to install it. Furthermore, this also simplifies >using libraries, as GODI supports findlib for all libraries, i.e. you just say > >ocamlfind ocamlc -package frontc -c your_module.ml > >and get rid of the .cma nightmare. > >Gerd >