The Meta-Environment API

term-utils.tb

Go to the documentation of this file.
00001 #ifndef __TERM__UTILS__
00002 #define __TERM__UTILS__
00003 
00004 #include <undefined.h>
00005 #define NO_NONTERMINAL ""
00006 #define TERM_TREE_CACHE "term-annotated-tree"
00007 
00008 process GetTermParseTable(ModuleId: module-id, Table: term?) is
00009   GetParseTable(ModuleId, trm, Table?)
00010 
00011 toolbus(InitCache(TERM_TREE_CACHE))
00012 toolbus(ClearCacheHandler(TERM_TREE_CACHE, SDF_NAMESPACE, "status", <term>, edited))
00013 
00014 process ClearTermParsetreeCacheListener is
00015 let
00016   Path: str
00017 in
00018   subscribe(term-modified(<str>))
00019   .
00020   (
00021     rec-note(term-modified(Path?))
00022     . snd-msg(ts-remove-value(TERM_TREE_CACHE, Path))
00023   )
00024   * delta
00025 endlet
00026 
00027 process ClearTermParsetreeCache(Path : str) is
00028     snd-msg(ts-remove-value(TERM_TREE_CACHE, Path))
00029 
00030 toolbus(ClearTermParsetreeCacheListener)
00031 
00032 process GetTermParsetree(ModuleId: module-id, Path: str, Result: term?) is
00033 let
00034   AmbPid: int,
00035   ParseTable: term,
00036   Pid: int,
00037   Text: str,
00038   Type: term,
00039   Tree: term
00040 in
00041   snd-msg(tm-request-transaction(term-parsing))
00042   . GetCachedValue(TERM_TREE_CACHE, Path, Tree?)
00043   .
00044   if equal(Tree, UNDEFINED) then
00045     Type := trm
00046     . GetTermParseTable(ModuleId, ParseTable?)
00047     .
00048     if not-equal(ParseTable, UNDEFINED) then
00049       ReadText(Path, Text?)
00050       .
00051       if not-equal(Text, "") then
00052         create(ParseTreeHandler(ModuleId, Path), Pid?)
00053     . RemoveAmbiguitySummary(Path)
00054         . ParseText(Pid, Text, ParseTable, NO_NONTERMINAL, off)
00055         .
00056         (
00057           rec-msg(parse-handler-done(Pid, ModuleId, Tree?))
00058       . create(AmbiguityHandler(Tree, Path), AmbPid?)
00059           . AnnotateTree(Tree, Path, Result?)
00060       . PutCachedValue(TERM_TREE_CACHE, Path, Result)
00061         +
00062           rec-msg(parse-handler-done(Pid))
00063           . Result := UNDEFINED
00064         )  
00065       else
00066         Result := UNDEFINED
00067       fi
00068     else
00069       Result := UNDEFINED
00070     fi
00071   else
00072     Result := Tree
00073   fi
00074   . snd-msg(tm-end-transaction(term-parsing))
00075 endlet
00076 
00077 #endif /* __TERM__UTILS__ */

Generated on Fri Sep 12 13:09:47 2008 for sdf-meta by  doxygen 1.4.6