The Meta-Environment API
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__ */