forked from GitHub/gf-rgl
Merge remote-tracking branch 'upstream/master' into extendlins
This commit is contained in:
2
Make.bat
2
Make.bat
@@ -99,4 +99,4 @@ for %%m in (%modules%) do (
|
||||
|
||||
REM Copy
|
||||
echo Copying to %dest%
|
||||
copy %dist% %dest%
|
||||
xcopy %dist% %dest% /d
|
||||
|
||||
16
Make.hs
16
Make.hs
@@ -1,3 +1,7 @@
|
||||
-- | Main build script for RGL
|
||||
-- There is no associated cabal file, but these dependencies are known:
|
||||
-- * directory >= 1.2.3.0
|
||||
|
||||
import Data.List (find,isPrefixOf,isSuffixOf,(\\),unfoldr)
|
||||
import Data.Maybe (catMaybes)
|
||||
import System.IO (hPutStrLn,stderr)
|
||||
@@ -6,7 +10,7 @@ import System.Exit (ExitCode(..),die)
|
||||
import System.Environment (getArgs,lookupEnv)
|
||||
import System.Process (rawSystem)
|
||||
import System.FilePath ((</>)) -- ,takeFileName,addExtension,dropExtension)
|
||||
import System.Directory (createDirectoryIfMissing,copyFile,getDirectoryContents,removeDirectoryRecursive,findFile)
|
||||
import System.Directory (createDirectoryIfMissing,copyFile,getModificationTime,setModificationTime,getDirectoryContents,removeDirectoryRecursive,findFile)
|
||||
import Control.Monad (when,unless)
|
||||
|
||||
main :: IO ()
|
||||
@@ -61,14 +65,20 @@ copyOne :: String -> FilePath -> FilePath -> IO ()
|
||||
copyOne file from to = do
|
||||
putStrLn $ "Copying [" ++ file ++ "] " ++ to
|
||||
createDirectoryIfMissing True to
|
||||
copyFile (from </> file) (to </> file)
|
||||
copyFileWithModificationTime (from </> file) (to </> file)
|
||||
|
||||
-- | Copy all files between directories
|
||||
copyAll :: String -> FilePath -> FilePath -> IO ()
|
||||
copyAll msg from to = do
|
||||
putStrLn $ "Copying [" ++ msg ++ "] " ++ to
|
||||
createDirectoryIfMissing True to
|
||||
mapM_ (\file -> when (file /= "." && file /= "..") $ copyFile (from </> file) (to </> file)) =<< getDirectoryContents from
|
||||
mapM_ (\file -> when (file /= "." && file /= "..") $ copyFileWithModificationTime (from </> file) (to </> file)) =<< getDirectoryContents from
|
||||
|
||||
-- | Copy a file together with its modification time but no other meta data
|
||||
copyFileWithModificationTime :: FilePath -> FilePath -> IO ()
|
||||
copyFileWithModificationTime source destination = do
|
||||
copyFile source destination
|
||||
getModificationTime source >>= setModificationTime destination
|
||||
|
||||
-- | Remove dist directory
|
||||
clean :: IO ()
|
||||
|
||||
2
Make.sh
2
Make.sh
@@ -97,4 +97,4 @@ done
|
||||
|
||||
# Copy
|
||||
echo "Copying to ${dest}"
|
||||
cp -R "${dist}"/* "${dest}"
|
||||
cp -R -p "${dist}"/* "${dest}"
|
||||
|
||||
5
Makefile
5
Makefile
@@ -2,7 +2,7 @@
|
||||
|
||||
RUNMAKE=runghc Make.hs
|
||||
|
||||
.PHONY: build copy install clean
|
||||
.PHONY: build copy install doc clean
|
||||
|
||||
default: build copy
|
||||
|
||||
@@ -14,5 +14,8 @@ copy:
|
||||
|
||||
install: build copy
|
||||
|
||||
doc: build
|
||||
make -C doc GF_LIB_PATH=../dist
|
||||
|
||||
clean:
|
||||
$(RUNMAKE) clean
|
||||
|
||||
@@ -21,7 +21,7 @@ interlingua = "Meaning"
|
||||
languages = [
|
||||
"afrikaans",
|
||||
-- "አማርኛ",
|
||||
-- "العربية",
|
||||
"العربية",
|
||||
"Български",
|
||||
"català",
|
||||
"中文",
|
||||
@@ -45,6 +45,7 @@ languages = [
|
||||
"پeرسن",
|
||||
"polski",
|
||||
"پنجابی",
|
||||
"português",
|
||||
"Русский",
|
||||
"ٻولي",
|
||||
"español",
|
||||
|
||||
79
doc/Makefile
79
doc/Makefile
@@ -1,56 +1,53 @@
|
||||
.PHONY: abstract synopsis
|
||||
.PHONY: abstract synopsis index status
|
||||
|
||||
all: exx synopsis
|
||||
all: synopsis
|
||||
|
||||
GF_alltenses=$(GF_LIB_PATH)/alltenses
|
||||
GF=gf
|
||||
GFDOC=gfdoc
|
||||
|
||||
index:
|
||||
txt2tags -thtml index.txt
|
||||
status:
|
||||
txt2tags -thtml status.txt
|
||||
synopsis:
|
||||
|
||||
synopsis: synopsis.html
|
||||
|
||||
S=../src
|
||||
|
||||
# List of languages extracted from MkSynopsis.hs
|
||||
LANGS=Afr Ara Bul Cat Chi Dan Dut Eng Est Eus Fin Fre Ger Gre Hin Ice Ita Jpn Lav Mlt Mon Nep Nor Nno Pes Pnb Pol Por Ron Rus Snd Spa Swe Tha Urd
|
||||
|
||||
# This list was constructed by observing what files MkSynopsis.hs reads
|
||||
SRC_FILES=$S/abstract/Common.gf $S/abstract/Cat.gf $S/api/Constructors.gf $S/abstract/Structural.gf $(patsubst %,$S/*/Paradigms%.gf,$(LANGS))
|
||||
|
||||
EXAMPLES_OUT=$(patsubst %,api-examples-%.txt,$(LANGS))
|
||||
INCLUDES=synopsis-intro.txt categories-intro.txt categories-imagemap.html synopsis-additional.txt synopsis-browse.txt synopsis-example.txt
|
||||
|
||||
synopsis.html: MkSynopsis.hs MkExxTable.hs $(INCLUDES) $(EXAMPLES_OUT) $(SRC_FILES)
|
||||
runghc MkSynopsis.hs
|
||||
|
||||
categories.png: categories.dot
|
||||
dot -Tpng $^ > $@
|
||||
|
||||
categories-imagemap.html: categories.dot
|
||||
dot -Tcmapx $^ > $@
|
||||
|
||||
abstract:
|
||||
gfdoc -txthtml ../src/abstract/*.gf
|
||||
mv ../src/abstract/*.html abstract
|
||||
$(GFDOC) -txthtml $S/abstract/*.gf
|
||||
mv $S/abstract/*.html abstract
|
||||
|
||||
exx-script:
|
||||
runghc MkExx.hs <api-examples.txt >api-examples.gfs
|
||||
exx: exx-script
|
||||
gf -retain -s $(GF_alltenses)/TryAfr.gfo <api-examples.gfs >api-examples-Afr.txt
|
||||
gf -retain -s $(GF_alltenses)/TryBul.gfo <api-examples.gfs >api-examples-Bul.txt
|
||||
gf -retain -s $(GF_alltenses)/TryCat.gfo <api-examples.gfs >api-examples-Cat.txt
|
||||
gf -retain -s $(GF_alltenses)/TryChi.gfo <api-examples.gfs >api-examples-Chi.txt
|
||||
gf -retain -s $(GF_alltenses)/TryDan.gfo <api-examples.gfs >api-examples-Dan.txt
|
||||
gf -retain -s $(GF_alltenses)/TryDut.gfo <api-examples.gfs >api-examples-Dut.txt
|
||||
gf -retain -s $(GF_alltenses)/TryEng.gfo <api-examples.gfs >api-examples-Eng.txt
|
||||
gf -retain -s $(GF_alltenses)/TryEst.gfo <api-examples.gfs >api-examples-Est.txt
|
||||
gf -retain -s $(GF_alltenses)/TryEus.gfo <api-examples.gfs >api-examples-Eus.txt
|
||||
gf -retain -s $(GF_alltenses)/TryFin.gfo <api-examples.gfs >api-examples-Fin.txt
|
||||
gf -retain -s $(GF_alltenses)/TryFre.gfo <api-examples.gfs >api-examples-Fre.txt
|
||||
gf -retain -s $(GF_alltenses)/TryGer.gfo <api-examples.gfs >api-examples-Ger.txt
|
||||
gf -retain -s $(GF_alltenses)/TryGre.gfo <api-examples.gfs >api-examples-Gre.txt
|
||||
gf -retain -s $(GF_alltenses)/TryHin.gfo <api-examples.gfs >api-examples-Hin.txt
|
||||
gf -retain -s $(GF_alltenses)/TryIce.gfo <api-examples.gfs >api-examples-Ice.txt
|
||||
gf -retain -s $(GF_alltenses)/TryIta.gfo <api-examples.gfs >api-examples-Ita.txt
|
||||
gf -retain -s $(GF_alltenses)/TryJpn.gfo <api-examples.gfs >api-examples-Jpn.txt
|
||||
gf -retain -s $(GF_alltenses)/TryLav.gfo <api-examples.gfs >api-examples-Lav.txt
|
||||
gf -retain -s $(GF_alltenses)/TryMlt.gfo <api-examples.gfs >api-examples-Mlt.txt
|
||||
gf -retain -s $(GF_alltenses)/TryMon.gfo <api-examples.gfs >api-examples-Mon.txt
|
||||
gf -retain -s $(GF_alltenses)/TryNep.gfo <api-examples.gfs >api-examples-Nep.txt
|
||||
gf -retain -s $(GF_alltenses)/TryNor.gfo <api-examples.gfs >api-examples-Nor.txt
|
||||
gf -retain -s $(GF_alltenses)/TryNno.gfo <api-examples.gfs >api-examples-Nno.txt
|
||||
gf -retain -s $(GF_alltenses)/TryPes.gfo <api-examples.gfs >api-examples-Pes.txt
|
||||
gf -retain -s $(GF_alltenses)/TryPnb.gfo <api-examples.gfs >api-examples-Pnb.txt
|
||||
gf -retain -s $(GF_alltenses)/TryPol.gfo <api-examples.gfs >api-examples-Pol.txt
|
||||
gf -retain -s $(GF_alltenses)/TryRon.gfo <api-examples.gfs >api-examples-Ron.txt
|
||||
gf -retain -s $(GF_alltenses)/TryRus.gfo <api-examples.gfs >api-examples-Rus.txt
|
||||
gf -retain -s $(GF_alltenses)/TrySnd.gfo <api-examples.gfs >api-examples-Snd.txt
|
||||
gf -retain -s $(GF_alltenses)/TrySpa.gfo <api-examples.gfs >api-examples-Spa.txt
|
||||
gf -retain -s $(GF_alltenses)/TrySwe.gfo <api-examples.gfs >api-examples-Swe.txt
|
||||
gf -retain -s $(GF_alltenses)/TryTha.gfo <api-examples.gfs >api-examples-Tha.txt
|
||||
gf -retain -s $(GF_alltenses)/TryUrd.gfo <api-examples.gfs >api-examples-Urd.txt
|
||||
|
||||
api-examples.gfs: api-examples.txt MkExx.hs
|
||||
runghc MkExx.hs < $< > $@
|
||||
|
||||
|
||||
# Since .gfo files aren't self-contained, the dependencies given here are
|
||||
# incomplete. But I am thinking that the Try%.gfo file will always be newer
|
||||
# than any other files it depends on, so the rule will trigger when
|
||||
# needed anyway. //TH 2018-10-22
|
||||
api-examples-%.txt: $(GF_alltenses)/Try%.gfo api-examples.gfs
|
||||
GF_LIB_PATH=$(GF_LIB_PATH) $(GF) -retain -s $< <api-examples.gfs >$@
|
||||
|
||||
clean:
|
||||
rm -rf synopsis.txt api-examples.gfs $(EXAMPLES_OUT)
|
||||
|
||||
@@ -52,6 +52,7 @@ langsCoding = [
|
||||
(("norwegian","Nor"),"Scand"),
|
||||
(("polish", "Pol"),""),
|
||||
(("punjabi", "Pnb"),""),
|
||||
(("portuguese", "Por"), "Romance"),
|
||||
(("romanian", "Ron"),""),
|
||||
(("russian", "Rus"),""),
|
||||
(("spanish", "Spa"),"Romance"),
|
||||
|
||||
@@ -1,29 +1,32 @@
|
||||
module MkExxTable (getApiExx, ApiExx, prApiEx, mkEx) where
|
||||
|
||||
import System.Cmd
|
||||
import System.Environment
|
||||
--import System.Cmd
|
||||
import System.Environment(getArgs)
|
||||
import Control.Monad(when)
|
||||
import qualified Data.Map as M
|
||||
import Data.Char
|
||||
|
||||
main = do
|
||||
xx <- getArgs
|
||||
aexx <- getApiExx xx
|
||||
aexx <- getApiExx' True xx
|
||||
return () -- putStrLn $ prApiExx aexx
|
||||
|
||||
getApiExx :: [FilePath] -> IO ApiExx
|
||||
getApiExx xx = do
|
||||
getApiExx = getApiExx' False
|
||||
|
||||
getApiExx' verbose xx = do
|
||||
s <- readFile (head xx)
|
||||
let aet = getApiExxTrees $ filter validOutput $ mergeOutput $ lines s
|
||||
aeos <- mapM readApiExxOne xx
|
||||
aeos <- mapM (readApiExxOne verbose) xx
|
||||
let aexx = mkApiExx $ ("API",aet) : aeos
|
||||
-- putStrLn $ prApiExx aexx
|
||||
return aexx
|
||||
|
||||
readApiExxOne file = do
|
||||
readApiExxOne verbose file = do
|
||||
s <- readFile file
|
||||
let lang = reverse (take 3 (drop 4 (reverse file))) -- api-exx-*Eng*.txt
|
||||
let api = getApiExxOne $ filter validOutput $ mergeOutput $ lines s
|
||||
putStrLn $ unlines $ prApiEx api ---
|
||||
when verbose $ putStrLn $ unlines $ prApiEx api ---
|
||||
return (lang,api)
|
||||
|
||||
-- map function -> language -> example
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import MkExxTable
|
||||
import System.Cmd
|
||||
import System.Environment
|
||||
import System.Process(system)
|
||||
import System.Environment(getArgs)
|
||||
import Data.Char
|
||||
import Data.List
|
||||
import qualified Data.ByteString.Char8 as BS
|
||||
@@ -16,10 +16,10 @@ synopsis = "synopsis.txt"
|
||||
-- the language in which revealed examples are shown
|
||||
revealedLang = "Eng"
|
||||
|
||||
-- all languages shown
|
||||
-- all languages shown (a copy of this list appears in Makefile)
|
||||
apiExxFiles = ["api-examples-" ++ lang ++ ".txt" | lang <- words
|
||||
-- "Eng Chi"
|
||||
"Afr Bul Cat Chi Dan Dut Eng Est Eus Fin Fre Ger Gre Hin Ice Ita Jpn Lav Mlt Mon Nep Nor Nno Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd"
|
||||
"Afr Ara Bul Cat Chi Dan Dut Eng Est Eus Fin Fre Ger Gre Hin Ice Ita Jpn Lav Mlt Mon Nep Nor Nno Pes Pnb Pol Por Ron Rus Snd Spa Swe Tha Urd"
|
||||
]
|
||||
|
||||
main = do
|
||||
@@ -244,6 +244,7 @@ syntaxAPI = srcPath "/api/Constructors.gf"
|
||||
structuralAPI = srcPath "/abstract/Structural.gf"
|
||||
paradigmFiles = [
|
||||
("Afrikaans", srcPath "/afrikaans/ParadigmsAfr.gf"),
|
||||
("Arabic", srcPath "/arabic/ParadigmsAra.gf"),
|
||||
("Basque", srcPath "/basque/ParadigmsEus.gf"),
|
||||
("Bulgarian", srcPath "/bulgarian/ParadigmsBul.gf"),
|
||||
("Catalan", srcPath "/catalan/ParadigmsCat.gf"),
|
||||
@@ -269,6 +270,7 @@ paradigmFiles = [
|
||||
("Nynorsk", srcPath "/nynorsk/ParadigmsNno.gf"),
|
||||
("Polish", srcPath "/polish/ParadigmsPol.gf"),
|
||||
("Punjabi", srcPath "/punjabi/ParadigmsPnb.gf"),
|
||||
("Portuguese", srcPath "/portuguese/ParadigmsPor.gf"),
|
||||
("Romanian", srcPath "/romanian/ParadigmsRon.gf"),
|
||||
("Russian", srcPath "/russian/ParadigmsRus.gf"),
|
||||
("Sindhi", srcPath "/sindhi/ParadigmsSnd.gf"),
|
||||
|
||||
@@ -24,6 +24,9 @@ table { border-collapse: collapse; }
|
||||
td, th { padding: 5px; }
|
||||
th { background: #9df; }
|
||||
td { background: white }
|
||||
h1,h2,h3,h4 { font-family: sans-serif; color: #303030;
|
||||
text-shadow: rgba(0,0,0,0.25) 2px 2px 5px;
|
||||
}
|
||||
|
||||
/* Quick links */
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Versions: [3.9 ./synopsis-v3.9.html] | latest (this one)
|
||||
|
||||
|
||||
=Introduction=
|
||||
|
||||
The GF Resource Grammar Library is the standard library for Grammatical Framework.
|
||||
It covers the morphology and basic syntax of currently 32 languages:
|
||||
It covers the morphology and basic syntax of currently 34 languages:
|
||||
Afrikaans,
|
||||
Arabic,
|
||||
Bulgarian,
|
||||
Catalan,
|
||||
Chinese (simplified),
|
||||
@@ -33,6 +32,7 @@ Norwegian (bokmål),
|
||||
Norwegial (nynorsk),
|
||||
Persian,
|
||||
Polish,
|
||||
Portuguese,
|
||||
Punjabi,
|
||||
Romanian,
|
||||
Russian,
|
||||
@@ -54,13 +54,13 @@ The main contents are:
|
||||
constructing trees in them.
|
||||
- [Chapter 2 #toc5]: syntactic construction functions, with cross-links and
|
||||
examples.
|
||||
- [Chapter 3 #toc84]: morphological paradigms.
|
||||
- [Chapter 4 #toc116]: additional libraries.
|
||||
- [Chapter 5 #toc122]: how to "browse" the library by
|
||||
- [Chapter 3 #toc85]: morphological paradigms.
|
||||
- [Chapter 4 #toc120]: additional libraries.
|
||||
- [Chapter 5 #toc126]: how to "browse" the library by
|
||||
loading the grammars into the ``gf`` command editor.
|
||||
- [Chapter 6 #toc123]: a brief example of how application grammars can
|
||||
- [Chapter 6 #toc127]: a brief example of how application grammars can
|
||||
use the resource modules.
|
||||
- [Detailed table of contents #toc124].
|
||||
- [Detailed table of contents #toc128].
|
||||
|
||||
|
||||
Other relevant documents:
|
||||
|
||||
@@ -5,26 +5,28 @@ flags optimize=noexpand ;
|
||||
lin
|
||||
|
||||
DetCN det cn = let {
|
||||
number = sizeToNumber det.n;
|
||||
state = possState det.d;
|
||||
cas : Case -> Case = if_then_else Case det.is1sg Bare ;
|
||||
number = sizeToNumber det.n ;
|
||||
determiner : Case -> Str = \c ->
|
||||
det.s ! cn.h ! (detGender cn.g det.n) ! c;
|
||||
noun : Case -> NTable -> Str = \c,nt ->
|
||||
let cas = if_then_else Case det.is1sg Bare c -- no case vowel with 1sg poss. suff.
|
||||
in nt ! number
|
||||
! nounState det.d number
|
||||
! nounCase cas det.n det.d
|
||||
det.s ! cn.h ! (detGender cn.g det.n) ! c ;
|
||||
noun : Case -> Str = \c ->
|
||||
cn.s ! number
|
||||
! nounState det.d number
|
||||
! nounCase c det.n det.d ;
|
||||
adj : Case -> Str = \c ->
|
||||
cn.adj ! number
|
||||
! (definite ! det.d) -- Indef remains Indef, rest become Def
|
||||
! c
|
||||
} in {
|
||||
s = \\c =>
|
||||
case cnB4det det.isPron det.isNum det.n det.d of {
|
||||
False => determiner c
|
||||
++ noun c cn.s -- deal with poss. suffix
|
||||
++ cn.adj ! number ! state ! c -- normal case+state
|
||||
++ cn.np ! c ;
|
||||
True => noun c cn.s -- deal with poss. suffix
|
||||
-- ++ determiner c -- or this?
|
||||
++ det.s ! cn.h ! cn.g ! c
|
||||
++ cn.adj ! number ! state ! c -- normal case+state
|
||||
++ noun c
|
||||
++ adj c
|
||||
++ cn.np ! c ;
|
||||
True => noun (cas c) -- deal with possessive suffix
|
||||
++ determiner c
|
||||
++ adj c
|
||||
++ cn.np ! c
|
||||
};
|
||||
a = { pgn = agrP3 cn.h cn.g number;
|
||||
@@ -45,23 +47,20 @@ lin
|
||||
};
|
||||
a = np.a
|
||||
} ;
|
||||
{-
|
||||
--should compile.. not working :( wierd error message.. bug?
|
||||
|
||||
{-
|
||||
PPartNP np v2 =
|
||||
let x = case np.a.pgn of {
|
||||
Per3 g n => ( positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ;
|
||||
_ => \\_ => [] -- not occuring anyway
|
||||
} in {
|
||||
s = \\c => np.s ! c ++ x ! c ;
|
||||
a = np.a
|
||||
};
|
||||
-}
|
||||
Per3 g n => positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; -- doesn't work because trying to glue runtime tokens
|
||||
Per2 g n => \\_ => [] ;
|
||||
_ => \\_ => []
|
||||
} in np ** {
|
||||
s = \\c => np.s ! c ++ v2.s ! VPPart ---- TODO: agreement
|
||||
};
|
||||
-}
|
||||
|
||||
-- FIXME try parsing something like "this house now" and you'll get
|
||||
-- an internal compiler error, but it still works.. wierd..
|
||||
AdvNP np adv = {
|
||||
s = \\c => np.s ! c ++ adv.s;
|
||||
a = np.a
|
||||
AdvNP np adv = np ** {
|
||||
s = \\c => np.s ! c ++ adv.s
|
||||
};
|
||||
{-
|
||||
DetSg quant ord = {
|
||||
@@ -104,7 +103,7 @@ lin
|
||||
PossPron p = {
|
||||
s = \\_,_,_,_ => p.s ! Gen;
|
||||
d = Poss;
|
||||
is1sg = case p.a.pgn of { Per1 _ => True ; _ => False } ;
|
||||
is1sg = case p.a.pgn of { Per1 Sing => True ; _ => False } ;
|
||||
isPron = True;
|
||||
isNum = False } ;
|
||||
|
||||
|
||||
@@ -435,8 +435,8 @@ resource ParadigmsAra = open
|
||||
mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn ->
|
||||
{ s =
|
||||
table {
|
||||
Acc => nI;
|
||||
Gen => I;
|
||||
Acc => BIND ++ nI; -- object suffix
|
||||
Gen => BIND ++ I; -- possessive suffix
|
||||
_ => ana
|
||||
};
|
||||
a = {pgn = pgn; isPron = True };
|
||||
|
||||
@@ -48,8 +48,6 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
||||
--for roots with 2 consonants (works also for assimilated strs, like fc~,
|
||||
--because the function discards anything after the first two characters
|
||||
mkRoot2 : Str -> Root2 = \fcl ->
|
||||
-- let { cl = drop 2 fcl} in --drop 1 fcl
|
||||
-- {f = take 2 fcl; c = take 2 cl}; --take 1
|
||||
case fcl of {
|
||||
f@? + c@? + _ => { f = f ; c = c } ;
|
||||
_ => error ("mkRoot2: too short root" ++ fcl)
|
||||
@@ -138,7 +136,7 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
||||
VPerf Voice PerGenNum
|
||||
| VImpf Mood Voice PerGenNum
|
||||
| VImp Gender Number
|
||||
| VPPart ;
|
||||
| VPPart ; -- TODO: add gender and number (or check if easy to use BIND)
|
||||
|
||||
PerGenNum =
|
||||
Per3 Gender Number
|
||||
@@ -956,7 +954,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
|
||||
--dual suffixes
|
||||
dl : State => Case => Str =
|
||||
table {
|
||||
Const =>
|
||||
(Const|Poss) =>
|
||||
table {
|
||||
Nom => "َا";
|
||||
_ => "َيْ"
|
||||
@@ -972,7 +970,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
|
||||
--sound masculine plural suffixes
|
||||
m_pl : State => Case => Str =
|
||||
table {
|
||||
Const =>
|
||||
(Const|Poss) =>
|
||||
table {
|
||||
Nom => "ُو";
|
||||
_ => "ِي"
|
||||
@@ -1045,9 +1043,6 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
|
||||
_ => Def --Lkitaabu
|
||||
};
|
||||
|
||||
possState : State -> State = \s ->
|
||||
case s of { Poss => Def ;
|
||||
x => x } ;
|
||||
--FIXME needs testing
|
||||
nounCase : Case -> Size -> State -> Case =
|
||||
\c,size,s ->
|
||||
@@ -1271,7 +1266,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
|
||||
mkNum : Str -> Str -> Str ->
|
||||
{s : DForm => CardOrd => Gender => State => Case => Str} =
|
||||
\wAhid,awwal,Ula ->
|
||||
let { wAhida = wAhid + "َة"} in
|
||||
let wAhida : Str = case wAhid of {
|
||||
x + "ة" => mkAt wAhid ;
|
||||
_ => wAhid + "َة" }
|
||||
in
|
||||
{ s= table {
|
||||
unit => table {
|
||||
NCard => table {
|
||||
|
||||
@@ -43,9 +43,9 @@ concrete StructuralAra of Structural = CatAra **
|
||||
-- how8many_IDet = mkDet "كَمْ" Pl Const ; -- IL: check (was ["هْو مَني"]) ;
|
||||
-- if_Subj = ss "ِف" ;
|
||||
in8front_Prep = ss "مُقَابِلَ" ;
|
||||
i_Pron = mkPron "أَنَا" "نِي" "ِي" (Per1 Sing);
|
||||
i_Pron = mkPron "أَنَا" "نِي" "ي" (Per1 Sing);
|
||||
in_Prep = ss "فِي" ;
|
||||
it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg); -- IL: check
|
||||
it_Pron = he_Pron ; -- was: it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg);
|
||||
-- less_CAdv = ss "لسّ" ;
|
||||
many_Det = mkDet "جَمِيع" Pl Const ;
|
||||
-- more_CAdv = ss "مْري" ;
|
||||
|
||||
@@ -92,9 +92,9 @@ concrete CatEng of Cat = CommonX - [Pol,SC,CAdv] ** open ResEng, Prelude in {
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||
V2, V2A, V2Q, V2S = Verb ** {c2 : Str} ;
|
||||
V3 = Verb ** {c2, c3 : Str} ;
|
||||
V, VS, VQ, VA = Verb ;
|
||||
V2, V2Q, V2S = Verb ** {c2 : Str} ;
|
||||
V2A,V3 = Verb ** {c2, c3 : Str} ;
|
||||
VV = {s : VVForm => Str ; p : Str ; typ : VVType} ;
|
||||
V2V = Verb ** {c2,c3 : Str ; typ : VVType} ;
|
||||
|
||||
@@ -114,8 +114,8 @@ concrete CatEng of Cat = CommonX - [Pol,SC,CAdv] ** open ResEng, Prelude in {
|
||||
VPSlash = \s -> predV {s = \\_ => s; p = ""; isRefl = False} ** {c2 = ""; gapInMiddle = False; missingAdv = False } ;
|
||||
|
||||
V, VS, VQ, VA = \s -> {s = \\_ => s; p = ""; isRefl = False} ;
|
||||
V2, V2A, V2Q, V2S = \s -> {s = \\_ => s; p = ""; isRefl = False; c2=""} ;
|
||||
V3 = \s -> {s = \\_ => s; p = ""; isRefl = False; c2,c3=""} ;
|
||||
V2, V2Q, V2S = \s -> {s = \\_ => s; p = ""; isRefl = False; c2=""} ;
|
||||
V3, V2A = \s -> {s = \\_ => s; p = ""; isRefl = False; c2,c3=""} ;
|
||||
VV = \s -> {s = \\_ => s; p = ""; isRefl = False; typ = VVInf} ;
|
||||
V2V = \s -> {s = \\_ => s; p = ""; isRefl = False; c2,c3="" ; typ = VVInf} ;
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ lin
|
||||
oil_N = regN "oil" ;
|
||||
old_A = regADeg "old" ;
|
||||
open_V2 = dirV2 (mkV "open" "opens" "opened" "opened" "opening") ;
|
||||
paint_V2A = mkV2A (regV "paint") noPrep ;
|
||||
paint_V2A = mkV2A (regV "paint") ;
|
||||
paper_N = regN "paper" ;
|
||||
paris_PN = mkPN (mkN nonhuman (mkN "Paris")) ;
|
||||
peace_N = regN "peace" ;
|
||||
|
||||
@@ -321,7 +321,11 @@ oper
|
||||
} ;
|
||||
ingV2V : V -> Prep -> Prep -> V2V ; -- e.g. prevent (noPrep NP) (from VP-ing)
|
||||
mkVA : V -> VA ; -- e.g. become (AP)
|
||||
mkV2A : V -> Prep -> V2A ; -- e.g. paint (NP) (AP)
|
||||
mkV2A : overload {
|
||||
mkV2A : V -> V2A ; -- e.g. paint (NP) (AP)
|
||||
mkV2A : V -> Prep -> V2A ; -- backwards compatibility
|
||||
mkV2A : V -> Prep -> Prep -> V2A ; -- e.g. strike (NP) as (AP)
|
||||
} ;
|
||||
mkVQ : V -> VQ ; -- e.g. wonder (QS)
|
||||
mkV2Q : V -> Prep -> V2Q ; -- e.g. ask (NP) (QS)
|
||||
|
||||
@@ -601,7 +605,11 @@ mkInterj : Str -> Interj
|
||||
|
||||
ingV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVPresPart}) ;
|
||||
mkVA v = lin VA v ;
|
||||
mkV2A v p = lin V2A (prepV2 v p) ;
|
||||
mkV2A = overload {
|
||||
mkV2A : V -> V2A = \v -> lin V2A (dirdirV3 v) ;
|
||||
mkV2A : V -> Prep -> V2A = \v,p -> lin V2A (dirV3 v p) ;
|
||||
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (prepPrepV3 v p1 p2) ;
|
||||
} ;
|
||||
mkV2Q v p = lin V2Q (prepV2 v p) ;
|
||||
|
||||
mkAS v = v ;
|
||||
|
||||
@@ -21,7 +21,7 @@ concrete VerbEng of Verb = CatEng ** open ResEng, Prelude in {
|
||||
SlashV2S v s = insertExtrac (conjThat ++ s.s) (predVc v) ; ---- insertExtra?
|
||||
--- SlashV2S v s = insertObjc (variants {\\_ => conjThat ++ s.s; \\_ => s.s}) (predVc v) ;
|
||||
SlashV2Q v q = insertExtrac (q.s ! QIndir) (predVc v) ;
|
||||
SlashV2A v ap = insertObjc (\\a => ap.s ! a) (predVc v) ; ----
|
||||
SlashV2A v ap = insertObjc (\\a => v.c3 ++ ap.s ! a) (predVc v) ; ----
|
||||
|
||||
ComplSlash vp np =
|
||||
let vp' = case vp.gapInMiddle of {
|
||||
|
||||
Reference in New Issue
Block a user