From 041c478245a0fd98f33921a45a89650048f756e9 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 9 Oct 2007 13:41:16 +0000 Subject: [PATCH] started revising resource HOWTO --- lib/resource-1.0/doc/Resource-HOWTO.txt | 20 ++++- lib/resource-1.0/doc/Syntax.dot | 111 ++++++++++++++++++++++++ lib/resource-1.0/doc/Syntax.png | Bin 0 -> 14804 bytes 3 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 lib/resource-1.0/doc/Syntax.dot create mode 100644 lib/resource-1.0/doc/Syntax.png diff --git a/lib/resource-1.0/doc/Resource-HOWTO.txt b/lib/resource-1.0/doc/Resource-HOWTO.txt index 6f8da1c46..fff5f439f 100644 --- a/lib/resource-1.0/doc/Resource-HOWTO.txt +++ b/lib/resource-1.0/doc/Resource-HOWTO.txt @@ -35,10 +35,24 @@ This document concerns the API v. 1.0. You can find the current code in -==The resource grammar API== +==The resource grammar structure== -The API is divided into a bunch of ``interface`` and ``resource`` modules. -The following figure gives the dependencies of these modules. +The library is divided into a bunch of modules, whose dependencies +are given in the following figure. + +[Syntax.png] + +- solid contours: module used by end users +- dashed contours: internal module +- ellipse: abstract/concrete pair of modules +- rectangle: resource or instance +- diamond: interface + + +The solid ellipses show the API as visible to the user of the library. The +dashed ellipses form the main of the implementation, on which the resource +grammar programmer has to work with. With the exception of the ``Paradigms`` +module, the visible API modules can be produced mechanically. [Grammar.png] diff --git a/lib/resource-1.0/doc/Syntax.dot b/lib/resource-1.0/doc/Syntax.dot new file mode 100644 index 000000000..a7081660e --- /dev/null +++ b/lib/resource-1.0/doc/Syntax.dot @@ -0,0 +1,111 @@ +digraph { + +size = "12,8" ; + +German [style = "solid", shape = "ellipse"]; +ExtraGer [style = "solid", shape = "ellipse"]; +IrregGer [style = "solid", shape = "ellipse"]; + +German -> IrregGer [style = "solid"]; +German -> ExtraGer [style = "solid"]; +German -> LangGer [style = "solid"]; +IrregGer -> ParadigmsGer [style = "solid"]; +ExtraGer -> Grammar [style = "solid"]; + +TryGer [style = "solid", shape = "rectangle"]; + +LangGer [style = "solid", shape = "ellipse"]; + +TryGer -> SyntaxGer [style = "solid"]; + +TryGer -> ParadigmsGer [style = "solid"]; + +TryGer -> Lexicon [style = "solid"]; + +LangGer -> Grammar [style = "solid"]; +LangGer -> Lexicon [style = "solid"]; + +Lexicon [style = "dashed", shape = "ellipse", URL = "Lang.gf"]; + +SyntaxGer [style = "solid", shape = "rectangle"]; + +SyntaxGer -> Syntax [style = "solid"]; + +ParadigmsGer [style = "solid", shape = "rectangle"]; + +Syntax [style = "solid", shape = "diamond"]; + +Syntax -> Grammar [style = "solid"]; +Syntax -> Constructors [style = "solid"]; +ParadigmsGer -> Grammar [style = "solid"]; + +Constructors [style = "dashed", shape = "ellipse", URL = "Lang.gf"]; + +Constructors -> Grammar [style = "solid"]; + +Grammar [style = "dashed", shape = "ellipse", URL = "Lang.gf"]; + + +Grammar -> Noun [style = "solid"]; +Grammar -> Verb [style = "solid"]; +Grammar -> Adjective [style = "solid"]; +Grammar -> Adverb [style = "solid"]; +Grammar -> Numeral [style = "solid"]; +Grammar -> Sentence [style = "solid"]; +Grammar -> Question [style = "solid"]; +Grammar -> Relative [style = "solid"]; +Grammar -> Conjunction [style = "solid"]; +Grammar -> Phrase [style = "solid"]; +Grammar -> Text [style = "solid"]; +Grammar -> Idiom [style = "solid"]; +Grammar -> Structural [style = "solid"]; + + +Noun [style = "dashed", shape = "ellipse", URL = "Noun.gf"]; +Noun -> Cat [style = "solid"]; + +Verb [style = "dashed", shape = "ellipse", URL = "Verb.gf"]; +Verb -> Cat [style = "solid"]; + +Adjective [style = "dashed", shape = "ellipse", URL = "Adjective.gf"]; +Adjective -> Cat [style = "solid"]; + +Adverb [style = "dashed", shape = "ellipse", URL = "Adverb.gf"]; +Adverb -> Cat [style = "solid"]; + +Numeral [style = "dashed", shape = "ellipse", URL = "Numeral.gf"]; +Numeral -> Cat [style = "solid"]; + +Sentence [style = "dashed", shape = "ellipse", URL = "Sentence.gf"]; +Sentence -> Cat [style = "solid"]; + +Question [style = "dashed", shape = "ellipse", URL = "Question.gf"]; +Question -> Cat [style = "solid"]; + +Relative [style = "dashed", shape = "ellipse", URL = "Relative.gf"]; +Relative -> Cat [style = "solid"]; + +Conjunction [style = "dashed", shape = "ellipse", URL = "Conjunction.gf"]; +Conjunction -> Cat [style = "solid"]; + +Phrase [style = "dashed", shape = "ellipse", URL = "Phrase.gf"]; +Phrase -> Cat [style = "solid"]; + +Text [style = "dashed", shape = "ellipse", URL = "Phrase.gf"]; +Text -> Cat [style = "solid"]; + +Idiom [style = "dashed", shape = "ellipse", URL = "Phrase.gf"]; +Idiom -> Cat [style = "solid"]; + +Structural [style = "dashed", shape = "ellipse", URL = "Structural.gf"]; +Structural -> Cat [style = "solid"]; + +#Lexicon [style = "dashed", shape = "ellipse", URL = "Lexicon.gf"]; +#Lexicon -> Cat [style = "solid"]; + +Cat [style = "dashed", shape = "ellipse", URL = "Cat.gf"]; +Cat -> Common [style = "solid"]; + +Common [style = "dashed", shape = "ellipse", URL = "Tense.gf"]; + +} diff --git a/lib/resource-1.0/doc/Syntax.png b/lib/resource-1.0/doc/Syntax.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc8161b1a5691a34795c243583d87a34eaac6a0 GIT binary patch literal 14804 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 literal 0 HcmV?d00001