From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 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 4CB1DBC69 for ; Fri, 30 Mar 2007 21:36:40 +0200 (CEST) Received: from yquem.inria.fr (yquem.inria.fr [128.93.8.37]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id l2UJacF5011227; Fri, 30 Mar 2007 21:36:39 +0200 Received: by yquem.inria.fr (Postfix, from userid 18965) id E946CBC69; Fri, 30 Mar 2007 21:36:35 +0200 (CEST) Date: Fri, 30 Mar 2007 21:36:35 +0200 From: Francois Pottier To: Joel Reymont Cc: Caml List Subject: Re: Error location reporting in Menhir Message-ID: <20070330193635.GA598@yquem.inria.fr> Reply-To: Francois.Pottier@inria.fr References: <7DE6C068-8889-4A8E-9C98-66471DDD9878@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <7DE6C068-8889-4A8E-9C98-66471DDD9878@gmail.com> User-Agent: Mutt/1.5.9i X-Miltered: at concorde with ID 460D66C7.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; 0100,:01 parser:01 rhs:01 parsing:01 rhs:01 parsing:01 syntax:01 parser:01 syntax:01 semicolon:01 semicolon:01 wrote:01 rewrite:01 cristal:01 functions:01 Hello, On Fri, Mar 30, 2007 at 03:02:06PM +0100, Joel Reymont wrote: > I currently retrieve location like this during parser errors: > > let rhs_loc n = (Parsing.rhs_start_pos n, Parsing.rhs_end_pos n) > > I then report it like this: > > let syntax_error s num = > parser_error s (rhs_loc num) > > In my grammar I report errors like this: > > | INPUT COLON input_decs error { syntax_error "Missing semicolon" 4 } > > How do I rewrite my error reporting for Menhir? Probably something like this: | INPUT COLON input_decs error { parser_error "Missing semicolon" ($startpos($4), $endpos($4)) } $startpos and $endpos are keywords and can be used only within a semantic action, so you can no longer define auxiliary functions such as your rhs_loc. Hope this helps, -- François Pottier Francois.Pottier@inria.fr http://cristal.inria.fr/~fpottier/