1
0
forked from GitHub/gf-core

translated TODO to english, restructured to fit with todoo-mode.el

This commit is contained in:
peb
2006-03-22 12:38:47 +00:00
parent 2e25df8941
commit e6beca01cb
2 changed files with 193 additions and 169 deletions

355
doc/TODO
View File

@@ -1,19 +1,30 @@
TODO in GF implementation
(P=Peter, A=Aarne, B=Björn)
* Some notes on the syntax of this file, making it possible to use todoo-mode.el:
- Items start with "* "
- Sub-items start with "- "
- It should be noted somewhere in the item, who has reported the item
Suggestion: Add "[who]" at the beginning of the item title
(then one can use "assign item" in todoo-mode)
- Each item should have a priority
Suggestion: Add "URGENT", "IMPORTANT" or "WISH" at the beginning of
the item title
- Sort the items in priority order
(todoo-mode can move an item up or down)
----------------------------------------------------------------------
URGENT
*(P) Felmeddelanden
* [peb] URGENT: Error messages for syntax errors
När det rapporteras syntaxfel bör det skrivas ut vilken fil det rör sig om.
Annars är det omöjligt att veta var felet ligger om man använder flaggan -s:
When a syntax error is reported, it should be noted which file it
is. Otherwise it is impossible to know where the error is
(if one uses the -s flag):
> i -s Domain/MP3/Domain_MP_Semantics.gf
syntax error at line 33 before ve , Proposition ,
> i -s Domain/MP3/Domain_MP_Semantics.gf
syntax error at line 33 before ve , Proposition ,
Andra sorters fel är det inget problem med:
There's no problem with other kinds of errors:
> i -s Domain/MP3/Domain_MP_Semantics.gf
checking module Godis_Semantics
@@ -23,190 +34,196 @@ Andra sorters fel
}
*(P) Hjälpkommandot
* [peb] IMPORTANT: Add the -path of a module to daughter modules
> h -printer
(där saknas -printer=cfgm)
Then the main module does not have to know where all grandchildren are:
> h -cat
WARNING: invalid option: cat
file A.gf:
abstract A = B ** {...}
> h -lang
WARNING: invalid option: lang
file B.gf:
--# -path=./resource
abstract B = Lang ** {...}
> h -language
WARNING: invalid option: language
> h -parser
WARNING: invalid option: parser
> h -aslkdjaslkdjss
WARNING: invalid option: aslkdjaslkdjss
Command not found.
(det borde stå: "option not found")
> h -optimize
WARNING: invalid option: optimize
> h -startcat
WARNING: invalid option: startcat
> h h
h, help: h Command?
(det borde även stå om h -option)
I.e.: the file A.gf should not need to know that B.gf uses the
resource library.
*(P) En moduls -path adderas till dottermodulerna,
så slipper huvudmodulen veta var alla barnbarn ligger:
* [peb] IMPORTANT: incomplete concrete and interfaces
fil A.hs:
abstract A = B ** {...}
- The following works in GF:
fil B.hs:
--# -path=./resource
abstract B = Lang ** {...}
incomplete concrete TestDI of TestA = open (C=TestCI) in {
lincat A = TestCI.A ** {p : Str};
lin f = TestCI.f ** {p = "f"};
g = TestCI.g ** {p = "g"};
}
Alltså: filen A.hs ska inte behöva veta att B.hs använder sig av resource.
> i -src TestDE.gf
- BUT, if we exchange "TestCI" for "C" we get an error:
incomplete concrete TestDI of TestA = open (C=TestCI) in {
lincat A = C.A ** {p : Str};
lin f = C.f ** {p = "f"};
g = C.g ** {p = "g"};
}
> i -src TestDE.gf
compiling TestDE.gf... failed to find C
OCCURRED IN
atomic term C given TestCE TestCI TestCE TestDE
OCCURRED IN
renaming definition of f
OCCURRED IN
renaming module TestDE
- the other modules:
abstract TestA = {
cat A;
fun f, g : A;
}
instance TestBE of TestBI = {
oper hello = "hello";
bye = "bye";
}
interface TestBI = {
oper hello : Str;
bye : Str;
}
concrete TestCE of TestA = TestCI with (TestBI = TestBE);
incomplete concrete TestCI of TestA = open TestBI in {
lincat A = {s : Str};
lin f = {s = hello};
g = {s = bye};
}
concrete TestDE of TestA = TestDI with (TestCI = TestCE);
* [peb] IMPORTANT: Missing things in the help command
> h -printer
(the flag -printer=cfgm is missing)
> h -cat
WARNING: invalid option: cat
> h -lang
WARNING: invalid option: lang
> h -language
WARNING: invalid option: language
> h -parser
WARNING: invalid option: parser
> h -aslkdjaslkdjss
WARNING: invalid option: aslkdjaslkdjss
Command not found.
(it should note: "option not found")
> h -optimize
WARNING: invalid option: optimize
> h -startcat
WARNING: invalid option: startcat
> h h
h, help: h Command?
(it should also mention "h -option")
*(P) Möjlighet att sätta GF_LIB_PATH inuti GF, t.ex. med:
* [peb] IMPORTANT: Set GF_LIb-PATH within GF
> sf libpath=...
> sf libpath=~/GF/lib
*(P) Möjlighet att sätta startkategorin för en grammatik med sf:
* [peb] IMPORTANT: Set the starting category with "sf"
> sf startcat=X
> sf startcat=X
*(P) import-flaggor:
* [peb] IMPORTANT: import-flags
när man gör "pg -printer=cfg", måste man ha gjort "i -conversion=finite",
"pg" bryr sig inte om vilka flaggor som sätts i grammatikfilen
- There are some inconsistencies when importing grammars:
1. when doing "pg -printer=cfg", one must have used "i -conversion=finite",
since "pg" doesn't care about the flags that are set in the grammar file
när man gör "pm -printer=cfgm", måste flaggan "conversion=finite" vara satt i grammatikfilen,
"pm" bryr sig inte om ifall man har gjort "i -conversion=finite"
2. when doing "pm -printer=cfgm", one must have set the flag
"conversion=finite" within the grammar file, since "pm" doesn't
care about the flags to the import command
det är väl jag (Peter) som borde fixa detta, men jag vet inte var de olika flaggorna ligger
(I guess it's me (peb) who should fix this, but I don't know where
the different flags reside...)
och det måste bestämmas vilka flaggor som har företräde:
- i grammatikfilen, med "flags conversion=finite"
- på kommandoraden, med "sf conversion=finite"
- till ett kommmande, med "i -conversion=finite fil.gf"
- Also, it must be decided in what cases flags can override other flags:
a) in the grammar file, e.g. "flags conversion=finite;"
b) on the command line, e.g. "> sf conversion=finite"
c) as argument to a command, e.g. "> i -conversion=finite file.gf"
- A related issue is to decide the scope of flags:
Some flags are (or should be) local to the module
(e.g. -coding and -path)
Other flags override daughter flags for daughter modules
(e.g. -startcat and -conversion)
* [peb] WISH: generalizing incomplete concrete
I want to be able to open an incomplete concrete module
inside another incomplete conrete.
Then I can instantiate both incompletes at the same time.
* [peb] WISH: _tmpi, _tmpo
The files _tmpi and _tmpo are never removed when quitting GF.
Further suggestion: put them in /tmp or similar.
peb: när man använder "|" till ett systemanrop, t.ex:
pg | ! sort
så skapas filerna _tmpi och _tmpo. Men de tas aldrig bort.
peb: Ännu bättre: ta bort filerna efteråt.
aarne: Sant: när GF quittas (om detta inte sker onormalt).
Eller när kommandot har kört färdigt (om det terminerar).
peb: Bäst(?): skapa filerna i /tmp eller liknande.
aarne: Ibland får man skrivrättighetsproblem - och det är
inte kul om man måste ange en tmp-path. Och olika
användare och gf-processer måste ha unika filnamn.
Och vet inte hur det funkar på windows...
aarne: Ett till alternativ skulle vara att använda handles
utan några tmp-filer alls. Men jag har inte hunnit
ta reda på hur det går till.
björn: Lite slumpmässiga tankar:
+ man kan använda System.Directory.getTemporaryDirectory, så slipper man iaf bry sig om olika plattformsproblem.
+ sen kan man använda System.IO.openTempFile för att skapa en temporär fil. Den tas dock inte bort när programmet avslutas, så det får man fixa själv.
+ System.Posix.Temp.mkstemp gör nåt liknande, men dokumentationen är dålig.
+ biblioteket HsShellScript har lite funktioner för sånt här, se
http://www.volker-wysk.de/hsshellscript/apidoc/HsShellScript.html#16
----------------------------------------------------------------------
NOT SO URGENT
* [peb] WISH: Hierarchic modules
Suggestion by peb:
The module A.B.C is located in the file A/B/C.gf
Main advantage: you no longer need to state "--# -path=..." in
modules
- How can this be combined with several modules inside one file?
*(P) incomplete concrete
- följande funkar i GF:
incomplete concrete TestDI of TestA = open (C=TestCI) in {
lincat A = TestCI.A ** {p : Str};
lin f = TestCI.f ** {p = "f"};
g = TestCI.g ** {p = "g"};
}
> i -src TestDE.gf
- compiling TestBI.gf... wrote file TestBI.gfr 110 msec
wrote file TestBI.gfc 110 msec
- compiling TestBE.gf... wrote file TestBE.gfr 120 msec
wrote file TestBE.gfc 120 msec
- compiling TestA.gf... wrote file TestA.gfc 120 msec
- compiling TestCI.gf... wrote file TestCI.gfc 130 msec
- compiling TestCE.gf... wrote file TestCE.gfc 140 msec
- compiling TestDI.gf... wrote file TestDI.gfc 140 msec
- compiling TestDE.gf... wrote file TestDE.gfc 150 msec
- MEN, om man byter ut "TestCI" mot "C" blir det fel:
incomplete concrete TestDI of TestA = open (C=TestCI) in {
lincat A = C.A ** {p : Str};
lin f = C.f ** {p = "f"};
g = C.g ** {p = "g"};
}
> i -src TestDE.gf
- compiling TestBI.gf... wrote file TestBI.gfr 170 msec
wrote file TestBI.gfc 170 msec
- compiling TestBE.gf... wrote file TestBE.gfr 170 msec
wrote file TestBE.gfc 180 msec
- compiling TestA.gf... wrote file TestA.gfc 190 msec
- compiling TestCI.gf... wrote file TestCI.gfc 200 msec
- compiling TestCE.gf... wrote file TestCE.gfc 200 msec
- compiling TestDI.gf... wrote file TestDI.gfc 200 msec
- compiling TestDE.gf... failed to find C
OCCURRED IN
atomic term C given TestCE TestCI TestCE TestDE
OCCURRED IN
renaming definition of f
OCCURRED IN
renaming module TestDE
- de övriga modulerna:
abstract TestA = {
cat A;
fun f, g : A;
}
instance TestBE of TestBI = {
oper hello = "hello";
bye = "bye";
}
interface TestBI = {
oper hello : Str;
bye : Str;
}
concrete TestCE of TestA = TestCI with (TestBI = TestBE);
incomplete concrete TestCI of TestA = open TestBI in {
lincat A = {s : Str};
lin f = {s = hello};
g = {s = bye};
}
concrete TestDE of TestA = TestDI with (TestCI = TestCE);
*(P) _tmpi, _tmpo
P: när man använder "|" till ett systemanrop, t.ex:
pg | ! sort
så skapas filerna _tmpi och _tmpo. Men de tas aldrig bort.
P: Ännu bättre: ta bort filerna efteråt.
A: Sant: när GF quittas (om detta inte sker onormalt).
Eller när kommandot har kört färdigt (om det terminerar).
P: Bäst(?): skapa filerna i /tmp eller liknande.
A: Ibland får man skrivrättighetsproblem - och det är
inte kul om man måste ange en tmp-path. Och olika
användare och gf-processer måste ha unika filnamn.
Och vet inte hur det funkar på windows...
A: Ett till alternativ skulle vara att använda handles
utan några tmp-filer alls. Men jag har inte hunnit
ta reda på hur det går till.
B: Lite slumpmässiga tankar:
- man kan använda System.Directory.getTemporaryDirectory, så slipper man iaf bry sig om olika plattformsproblem.
- sen kan man använda System.IO.openTempFile för att skapa en temporär fil. Den tas dock inte bort när programmet avslutas, så det får man fixa själv.
- System.Posix.Temp.mkstemp gör nåt liknande, men dokumentationen är dålig.
- biblioteket HsShellScript har lite funktioner för sånt här, se
http://www.volker-wysk.de/hsshellscript/apidoc/HsShellScript.html#16
*(P) Hierarkiska moduler
P: Förslag: A.B.C ligger i filen A/B/C.gf
Största fördelen: man slipper ange --# -path=...

View File

@@ -44,6 +44,13 @@ data TTerm = Constr :@ [TTerm]
| TVar Var
deriving (Eq, Ord, Show)
{-- andra ordningens funktioner:
data Decl c = Decl Var [(c,[TTerm])] (c,[TTerm])
-- (A -> B) ==> Decl _ [(A,[])] (B,[])
-- (A -> B -> C) ==> Decl _ [(A,[]), (B,[])] (C,[])
-- (y : A t x -> B (t x)) ==> Decl y [(A,[t:@[],TVar x])] (B,[t:@[TVar x]])
-}
decl2cat :: Decl c -> c
decl2cat (Decl _ cat _) = cat