Files
gf-core/doc/TODO
2006-03-22 05:57:28 +00:00

213 lines
5.4 KiB
Plaintext

TODO in GF implementation
(P=Peter, A=Aarne, B=Björn)
----------------------------------------------------------------------
URGENT
*(P) Felmeddelanden
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:
> i -s Domain/MP3/Domain_MP_Semantics.gf
syntax error at line 33 before ve , Proposition ,
Andra sorters fel är det inget problem med:
> i -s Domain/MP3/Domain_MP_Semantics.gf
checking module Godis_Semantics
Happened in linearization of userMove :
product expected instead of {
pl : Str
}
*(P) Hjälpkommandot
> h -printer
(där saknas -printer=cfgm)
> 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.
(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)
*(P) En moduls -path adderas till dottermodulerna,
så slipper huvudmodulen veta var alla barnbarn ligger:
fil A.hs:
abstract A = B ** {...}
fil B.hs:
--# -path=./resource
abstract B = Lang ** {...}
Alltså: filen A.hs ska inte behöva veta att B.hs använder sig av resource.
*(P) Möjlighet att sätta GF_LIB_PATH inuti GF, t.ex. med:
> sf libpath=...
*(P) Möjlighet att sätta startkategorin för en grammatik med sf:
> sf startcat=X
*(P) import-flaggor:
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
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"
det är väl jag (Peter) som borde fixa detta, men jag vet inte var de olika flaggorna ligger
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"
----------------------------------------------------------------------
NOT SO URGENT
*(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=...