Plasma GitLab Archive
Projects Blog Knowledge

******************************************************************************
Release Notes for PXP (Last updated:  20-Jul-2001)
******************************************************************************


==============================================================================
Linker problems
==============================================================================

------------------------------------------------------------------------------
Assert_failure ("pxp_lexers.ml", 1573, 1585)
------------------------------------------------------------------------------

This issue applies to: PXP 1.1

Problem description: 

"We just install the pxp parser and have trouble in using it. 
We always obtained an exception that we can not supress. 
Do you know if it's a problem of setting configuration options. 
 
#  let d = parse_dtd_entity default_config (from_file "DAG.xml");; 
                                              ^^^^^^^^^^^? 
Uncaught exception: Assert_failure ("pxp_lexers.ml", 1573, 1585)."



Explanation: You need to link a lexer to the executable. (Ok, the error message 
could be better; an Assert_failure is not very explanative.) Lexers are 
dynamically registered at runtime in the module Pxp_lexers, so you can link an 
executable that does not contain a lexer without producing a linker error.

Example how to link correctly:

-  Direct linking without findlib: 
   
   ocamlc -o my_exec ... pxp_engine.cma pxp_lex_iso88591.cma
             pxp_lex_link_iso88591.cmo
   
   Don't forget to add the .cmo file! It contains the registering code that 
   plugs the lexers from pxp_lex_iso88591.cma into the registry. It _must_ be a 
   .cmo file, otherwise the initialization call would be "garbage-collected" at 
   link-time. (.cmx file if ocamlopt is used.) 
   
-  Linking with findlib: 
   
   
   ocamlfind ocamlc -o my_exec ... -package "pxp_engine,pxp_lex_iso88591" -linkpkg
   
   
   
For the other lexers, the linker calls are similar.

The following combinations of lexers are reasonable:

-  pxp_lex_iso88591 alone
   
-  pxp_lex_utf8 alone
   
-  pxp_lex_iso88591 + pxp_lex_utf8
   
-  pxp_wlex alone
   
It is not reasonable not to have a lexer at all, even if PXP is only used to 
represent XML trees internally, and not as parser. There must be a lexer for 
the character set that is used for the internal representation of strings. For 
example, if config.encoding = `Enc_utf8 (see module Pxp_yacc for the config 
record), there must be a lexer for UTF-8 (i.e. pxp_lex_utf8 or pxp_wlex).


This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml