Detta är en del knapphändig dokumentation till UCP2.
UCP är ett terminalprogram och startas med *ucp* till en kommandorad.
UCP är inbäddat i lisp, så när man kör UCP kommer man in i en vanlig read-eval-print-loop i en fullständig Commonlisp. För tillfället kör vi UCP i Commonlispimplementationen CLISP som är skriven av Bruno Haible och Michael Stoll.
Det finns en del flaggor och optioner man kan ge till UCP. Normalt behöver man inte ange några av dessa, men speciellt vid batchbehandlingar är de användbara. De är (observera att inte alla är dokumenterade här ännu):
-d
--divide
-e
--environment
-f
--fixfile
-h
--host
-i
--initfile
-m FIL
--memoryimage=FIL
-p
--port
-x LISPUTTRYCK
--execute==LISPUTTRYCK
Eftersom UCP är skriven som utökningar av lispen så känns det nog rätt egendomligt om man inte kan lisp. Listor är en vanlig datatyp i lisp, och de noteras inom parenteser och med mellanrum mellan lispelementen. En lista med tre element kan t.ex. se ut så här:
(ett två tre)
Funktionsanrop i lisp noteras som sådana listor, så det man skriver i
UCP är mestadels listor med namnet på funktionen (eller kommandot)
först. T.ex. laddar man filer med funktionen LOAD i lisp, så om
man har skrivit en antal kommandon i en fil så kan man exekvera allt i
den filen med
(load "filnamn")
För att avsluta den här lispen används funktionen QUIT, utan
några argument, dvs. man skriver
(quit)
Promptern i UCP är normalt något i stil med UCP[17]>.
När det har uppstått något fel får
man istället en prompter i stil med 1. Break UCP[17]>.
Här kan man ange särskilda kommandon för att undersöka det fel man har
fått. Använd kommandot abort för att avbryta detta och gå
tillbaks till toppnivån.
(I själva verket går abort bara upp en nivå,
så om man är inne i ett fel i ett fel behöver man ge kommandot flera
gånger. Observera att abort inte ska sättas inom parentes.
Det är ingen funktion, utan ett speciellt kommando till debuggern i
just den här implementationen av lisp. (Ett annat kommando i samma
läge är help som talar om vilka andra särskilda kommandon man
kan ge.)
Ifall UCP inte verkar ge någon respons kan man avbryta exekveringen med Ctrl-C.
Det finns ingen inbyggd grammatik i UCP, utan man kan skriva vilka grammatikregler man vill och detsamma gäller lexikon. Dokumentation om hur man gör detta finns (ännu) inte här.
Dessa definitioner sker med funktionen define.
När man har samlat en mängd definitioner av grammatikregler i lexikon
i en fil kan man ladda den med den vanliga lisp-funktionen
LOAD.
Om ens applikation består av en mängd filer bör man istället använda
en särskild UCP-funktion LOADG (= load grammar) som skiljer sig
genom att sätta aktuell katalog under inladdningen. Om man gör
(loadg "german/morf.ucp2")
sätts alltså aktuell katalog till german/ medan
morf.ucp2 laddas, så om det står (load "noun.ucp2")
i den kommer german/noun.ucp2 i samma katalog att laddas.
På detta sätt kan man undvika att skriva absoluta filnamn i filerna,
vilket slutar fungera när man flyttar grammatiken någonannanstans.
För programmet spelar det ingen roll, men det rekommenderas att man
använder extensionen .ucp2 för UCP2-filer. (Tidigare användes
nästan alltid .grm för grammatikfiler och .dic för
lexikonfiler, så det är fortfarande vanligt.)
För att parsa (analysera) en text används funktionen
PROCESS som kan förkortas P tillsammans med
PRINTRESULT som kan förkortas PR.
(process "Gräv där du står!")
(printresult)
Detta kommer att analysera den givna texten samt sedan skriva ut eventuella parsningar.
Till PROCESS kan man lägga till flaggor som talar om att
analysen ska spåras. Det görs med ett andra argument som är en lista
över vilka saker som ska spåras. De möjliga sakerna att spåra är
chart, scheduling, selection, search, ruleentry, ruleexit,
rulestep.
Exempel:
(p "en liten fisk" (ruleentry ruleexit))
(p "utan vidare" ())
I det första exemplet ges spårutskrifter för när analysen kommer in i grammatikregler samt när den lämnar det. I det andra exemplet är spårlistan tom, dvs. ingenting kommer att spåras. Skönsvärdet är att samma spårning görs som förra gången, så detta behövs för att uttryckligen stänga av spårning efter att man har använt det.
Den spårning som ger mest detaljer är rulestep.
Efter varje spårutskrift avbryts parsningen och man får en prompter
!. Där kan man ge särskilda spårningskommandon. Med ?
får man veta vilka spårningar som är på och vilka som är av.
Med ?? får man veta vilka särskilda spårningskommandon man kan
ge.
Varje spårningskommando avslutas med returtangenten. Genom att trycka på den utan att skriva något innan går man vidare i analysen.
try-fileOm man har en färdig fil med ord som man vill köra genom parsern
ett och ett använder man funktionen TRY-FILE.
Första argumentet till TRY-FILE är den fil som orden ligger i.
Det enklaste sättet att använda den är alltså i stil med
(tryfile "min-fil")
Då tar TRY-FILE bara reda på vilka av orden som har nån parsning
och vilka som inte har det. De läggs i varsin fil som heter
min-fil.OK och min-fil.0 respektive.
Vill man ha ett annat beteende så måste man ge ytterligare argument
till TRY-FILE. Dessa ytterligare argument är så kallade
nyckelordsargument. Nyckelordsargument ges parvis, först ett
nyckelord (som är en symbol som börjar med kolon) och sen ett värde.
Ett exempel är
(try-file "min-fil" :report-style :parses :start 6)
I detta exempel har nyckelordsargumentet :REPORT-STYLE fått värdet
:PARSES och nyckelordsargumentet :START fått värdet 6.
Det betyder att hela parsningarna ska hamna i resultatfilen (som då
kommer att heta my-file.parses istället) och att orden i inputfilen
börjar först på kolumn 6.
De mest användbara nyckelordsargumenten till TRY-FILE
(och deras mest användbara värden) är:
:PARSE-FILE
:NON-PARSE-FILE
:SAME istället för en sträng så
hamnar dessa i samma fil som parsningarna.
:REPORT-STYLE
:WORD (bara ordet listas),
:PLUS (ordet listas med ett plustecken framför),
:PARSES (hela parsningarna visas),
:LEMMAS (bara lemmana från parsningarna visas).
:ZERO-STYLE
:WORD (bara ordet listas),
:MINUS (ordet listas med ett minustecken framför).
:START
abort: Fel
load: Lisp
loadg: Grammatik och lexikon
p: Parsning
pr: Parsning
printresult: Parsning
process: Parsning
quit: Lisp
try-file: try-file