On 14-3-2016 21:04, Camil Staps wrote:
Hi all,

I would like to use modules from the compiler to outsource parsing a
definition module. I wrote the code beneath based on what I saw in the
compiler code and some hacking. It works, but I'm not sure if this is
the preferred way to use cocl's parser (if there *is* a preferred way).

In particular, I wasn't sure how I was supposed to create a new heap /
hashtable / pointer. Is it correct to use init_identifiers, nilPtr, and
IC_Module NoQualifiedIdents?

init_identifiers and IC_Module NoQualifiedIdents are correct. nilPtr
can be removed.

Any help is much appreciated. Thanks in advance.

You can pass mod_id.boxed_ident from putIdentInHashTable to
wantModule instead of id and remove the definitions of ptr and id.

Kind regards,

John van Groningen

Camil

-----------------------

   // StdEnv
   import StdFile

   // frontend
   import Heap, compile, parse, predef

   mod_id :== "StdList"
   filename :== "/opt/clean/lib/StdEnv/" +++ mod_id +++ ".dcl"

   Start w
   # (ok,f,w) = fopen filename FReadText w
   | not ok = abort ("Couldn't open file " +++ filename +++ "\n")
   # (st, w) = init_identifiers newHeap w
   # ptr = nilPtr
   # cache = empty_cache st
   # id = {id_name=mod_id, id_info=ptr}
   # (mod_id, ht) = putIdentInHashTable mod_id (IC_Module
NoQualifiedIdents) cache.hash_table
     cache = {cache&  hash_table=ht}
   # ((ok,dynamics_used,module,ht,f),w)
       = accFiles (wantModule` f "" False id NoPos False ht stderr) w
   # (ok,w) = fclose f w
   // do something with module

   wantModule` :: !*File !{#Char} !Bool !Ident !Position !Bool
!*HashTable !*File !*Files
        ->  ((!Bool,!Bool,!ParsedModule, !*HashTable, !*File), !*Files)
   wantModule` f s b1 i p b2 ht io fs
   # (b1,b2,pm,ht,f,fs) = wantModule f s b1 i p b2 ht io fs
   = ((b1,b2,pm,ht,f),fs)

   //From syntax.icl:
   abort_empty_SymbolTableEntry :: a
   abort_empty_SymbolTableEntry = abort "empty SymbolTableEntry"




_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list

_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list

Reply via email to