Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] line number information in abstract syntax trees
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Rafael 'Dido' Sevilla <dido@i...>
Subject: [Caml-list] line number information in abstract syntax trees
As some of you have suggested earlier, I have foregone doing some
preliminary semantic analysis for my compiler in my ocamlyacc grammar,
and instead am using the grammar solely to do syntactic analysis.  Which
then brings me to another problem.  I've created an abstract syntax tree
data type, but now I need to somehow embed line number information
obtained from the syntactic analysis phase so that I can later do error
reporting.  I can't think of a clean way to do this.  So far, I have a
syntax tree data type that kind of looks like:

type program = { impmodule: string ; tdecls: topdecl list; plineno:int}
and topdecl =
    Declaration of decl * int
and decl = { idents: string list ; dtype: xtype ; dlineno:int}
and xtype =
    Data of datatype * int
  | Func of fntype * int
  | Alias of xtype * int
and datatype =
    Byte of int
  | Int of int
  | Big of int
  | Real of int
  | String of int
  | Tuple of (datatype list * int)
  | Array of (datatype * int)
  | List of (datatype * int)
  | Chan of (datatype * int)

Note that all the record types have additional fields that look like
'plineno:int' and every variant type has an int tacked on somewhere.
That int is supposed to contain the line number.

This works just fine, but it just seems to me like such a grossly ugly
hack into what is otherwise an elegant-looking data structure.  Anyone
have style guidelines 

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners