mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
translated TODO to english, restructured to fit with todoo-mode.el
This commit is contained in:
355
doc/TODO
355
doc/TODO
@@ -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=...
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user