1
0
forked from GitHub/gf-core

added srg; extended shallow

This commit is contained in:
aarne
2004-04-16 15:21:56 +00:00
parent 31444ab458
commit 9b47f67467
6 changed files with 189 additions and 26 deletions

View File

@@ -8,6 +8,11 @@
-- It is not primarily aimed to be used through selection from the API,
-- but through a parser.
-- It can also serve for experiments with shallow (fast?) parsing.
--
-- S ::= NP Adv* V NP? Adv*
-- | NP Adv* "is" Adj Adv*
-- NP ::= Det CN
-- CN ::= Adj* N
abstract Shallow = {
cat
@@ -21,38 +26,84 @@ abstract Shallow = {
N ;
Noun ;
CN ;
NP ;
PN ;
NP ;
Det ;
Adv ;
Prep ;
Num ;
fun
PhrS : S -> Phr ;
PhrQu : Qu -> Phr ;
PhrS : S -> Phr ;
PhrQu : Qu -> Phr ;
PhrImp : Imp -> Phr ;
SVerb, SNegVerb : NP -> Verb -> S ;
SVerb, SNegVerb : NP -> Verb -> S ;
SVerbPP, SNegVerbPP : NP -> Verb -> Adv -> S ;
STV, SNegTV : NP -> TV -> NP -> S ;
SAdj, SNegAdj : NP -> Adj -> S ;
SAdjPP, SNegAdjPP : NP -> Adj -> Adv -> S ;
SCN, SNegCN : NP -> CN -> S ;
SAdv,SNegAdv : NP -> Adv -> S ;
STV, SNegTV : NP -> TV -> NP -> S ;
SAdj, SNegAdj : NP -> Adj -> S ;
SAdjPP, SNegAdjPP : NP -> Adj -> Adv -> S ;
SCN, SNegCN : NP -> CN -> S ;
SAdv,SNegAdv : NP -> Adv -> S ;
QuVerb, QuNegVerb : NP -> Verb -> Qu ;
QuVerb, QuNegVerb : NP -> Verb -> Qu ;
ImpVerb, ImpNegVerb : Verb -> Imp ;
ImpAdj, ImpNegAdj : Adj -> Imp ;
ImpCN, ImpNegCN : CN -> Imp ;
ImpAdv,ImpNegAdv : Adv -> Imp ;
ImpAdj, ImpNegAdj : Adj -> Imp ;
ImpCN, ImpNegCN : CN -> Imp ;
ImpAdv,ImpNegAdv : Adv -> Imp ;
ModNoun : Adj -> Noun -> Noun ;
PrepNP : Prep -> NP -> Adv ;
PrepNoun : CN -> Prep -> NP -> CN ;
CNNoun : Noun -> CN ;
NounN : N -> Noun ;
DefNP, IndefNP, EveryNP, AllNP : CN -> NP ;
UsePN : PN -> NP ;
DefNP : CN -> NP ;
IndefNP : CN -> NP ;
DetNP : Det -> CN -> NP ;
PrepNP : Prep -> NP -> Adv ;
AdvNoun : CN -> Adv -> CN ;
CNNoun : Noun -> CN ;
NounN : N -> Noun ;
ModNoun : Adj -> Noun -> Noun ;
NoNum : Num ;
-- copied from Structural
EveryDet, WhichDet, AllMassDet, -- every, sg which, sg all
SomeDet, AnyDet, NoDet, -- sg some, any, no
MostDet, MostsDet, ManyDet, MuchDet : Det ; -- sg most, pl most, many, much
ThisDet, ThatDet : Det ; -- this, that
AllNumDet, WhichNumDet, -- pl all, which (86)
SomeNumDet, AnyNumDet, NoNumDet, -- pl some, any, no
TheseNumDet, ThoseNumDet : Num -> Det ; -- these, those (86)
ThisNP, ThatNP : NP ; -- this, that
TheseNumNP, ThoseNumNP : Num -> NP ; -- these, those (86)
INP, ThouNP, HeNP, SheNP, ItNP : NP ; -- personal pronouns in singular
WeNumNP, YeNumNP : Num -> NP ; -- these pronouns can take numeral
TheyNP : NP ; YouNP : NP ; -- they, the polite you
EverybodyNP, SomebodyNP, NobodyNP, -- everybody, somebody, nobody
EverythingNP, SomethingNP, NothingNP : NP ; -- everything, something, nothing
InPrep, OnPrep, ToPrep, FromPrep, -- spatial relations
ThroughPrep, AbovePrep, UnderPrep,
InFrontPrep, BehindPrep, BetweenPrep : Prep ;
BeforePrep, DuringPrep, AfterPrep : Prep ; -- temporal relations
WithPrep, WithoutPrep, ByMeansPrep : Prep ; -- some other relations
PossessPrep : Prep ; -- possessive/genitive
PartPrep : Prep ; -- partitive "of" ("bottle of wine")
AgentPrep : Prep ; -- agent "by" in passive constructions
--!
--2 Affirmation and negation
--
-- The negative-positive (French "si", German "doch") is missing.
PhrYes, PhrNo : Phr ; -- yes, no
PossessPrep : Prep ;
}

View File

@@ -17,6 +17,7 @@ incomplete concrete ShallowI of Shallow = open (Resource = Resource) in {
Adv = Resource.AdV ;
Det = Resource.Det ;
Prep = Resource.Prep ;
Num = Resource.Num ;
lin
PhrS = Resource.IndicPhrase ;
@@ -63,15 +64,76 @@ incomplete concrete ShallowI of Shallow = open (Resource = Resource) in {
ModNoun a n = Resource.ModAdj (Resource.AdjP1 a) n ;
PrepNP = Resource.PrepNP ;
PrepNoun f p x = Resource.AdvCN f (Resource.PrepNP p x) ;
AdvNoun f a = Resource.AdvCN f a ;
NounN = Resource.UseN ;
CNNoun n = n ;
AllNP = Resource.DetNP (Resource.AllNumDet Resource.NoNum) ;
EveryNP = Resource.DetNP Resource.EveryDet ;
DetNP = Resource.DetNP ;
DefNP = Resource.DefOneNP ;
IndefNP = Resource.IndefOneNP ;
UsePN = Resource.UsePN ;
PossessPrep = Resource.PossessPrep ;
-- created in hugs from gf Warning lines by:
-- do {s <- readFile "koe2" ; mapM_ (appendFile "koe3" . (\f -> f ++ " = Resource." ++ f ++ " ;\n") . last . words) (lines s)}
AfterPrep = Resource.AfterPrep ;
AgentPrep = Resource.AgentPrep ;
AllMassDet = Resource.AllMassDet ;
AllNumDet = Resource.AllNumDet ;
AnyDet = Resource.AnyDet ;
AnyNumDet = Resource.AnyNumDet ;
BeforePrep = Resource.BeforePrep ;
BehindPrep = Resource.BehindPrep ;
BetweenPrep = Resource.BetweenPrep ;
ByMeansPrep = Resource.ByMeansPrep ;
DuringPrep = Resource.DuringPrep ;
EveryDet = Resource.EveryDet ;
EverybodyNP = Resource.EverybodyNP ;
EverythingNP = Resource.EverythingNP ;
FromPrep = Resource.FromPrep ;
HeNP = Resource.HeNP ;
INP = Resource.INP ;
InFrontPrep = Resource.InFrontPrep ;
InPrep = Resource.InPrep ;
ItNP = Resource.ItNP ;
ManyDet = Resource.ManyDet ;
MostDet = Resource.MostDet ;
MostsDet = Resource.MostsDet ;
MuchDet = Resource.MuchDet ;
NoDet = Resource.NoDet ;
NoNum = Resource.NoNum ;
NoNumDet = Resource.NoNumDet ;
NobodyNP = Resource.NobodyNP ;
NothingNP = Resource.NothingNP ;
OnPrep = Resource.OnPrep ;
PartPrep = Resource.PartPrep ;
PhrNo = Resource.PhrNo ;
PhrYes = Resource.PhrYes ;
PossessPrep = Resource.PossessPrep ;
SheNP = Resource.SheNP ;
SomeDet = Resource.SomeDet ;
SomeNumDet = Resource.SomeNumDet ;
SomebodyNP = Resource.SomebodyNP ;
SomethingNP = Resource.SomethingNP ;
ThatDet = Resource.ThatDet ;
ThatNP = Resource.ThatNP ;
TheseNumDet = Resource.TheseNumDet ;
TheseNumNP = Resource.TheseNumNP ;
TheyNP = Resource.TheyNP ;
ThisDet = Resource.ThisDet ;
ThisNP = Resource.ThisNP ;
ThoseNumDet = Resource.ThoseNumDet ;
ThoseNumNP = Resource.ThoseNumNP ;
ThouNP = Resource.ThouNP ;
ThroughPrep = Resource.ThroughPrep ;
ToPrep = Resource.ToPrep ;
UnderPrep = Resource.UnderPrep ;
WeNumNP = Resource.WeNumNP ;
WhichDet = Resource.WhichDet ;
WhichNumDet = Resource.WhichNumDet ;
WithPrep = Resource.WithPrep ;
WithoutPrep = Resource.WithoutPrep ;
YeNumNP = Resource.YeNumNP ;
YouNP = Resource.YouNP ;
}

48
src/GF/CF/CFtoSRG.hs Normal file
View File

@@ -0,0 +1,48 @@
{-
**************************************************************
GF Module
Description : This module prints a CF as a SRG (Speech
Recognition Grammar).
Author : Markus Forsberg (markus@cs.chalmers.se)
License : GPL (GNU General Public License)
Created : 21 January, 2001
Modified : 16 April, 2004 by Aarne Ranta for GF 2
**************************************************************
-}
module CFtoSRG where
import Operations
import CF
import CFIdent
---import UseGrammar
import PPrCF
import List (intersperse)
header :: String
header = unlines ["#ABNF 1.0 ISO-8859-1;\n",
"language en;",
"mode voice;",
"root $Main;",
"meta \"author\" is \"Grammatical Framework\";\n"]
prSRG :: CF -> String
prSRG cf = (header ++) $ prSRGC (catsOfCF cf) cf
prSRGC :: [CFCat] -> CF -> String
prSRGC [] _ = []
prSRGC (c:cs) cf = "$" ++ prCFCat c ++ " = " ++ items ++ ";\n"++ prSRGC cs cf
where items = concat $ intersperse " | " $
map f $ map valItemsCF (rulesForCFCat cf c)
f [] = "$NULL"
f xs = unwords $ map prSRGItem xs
prSRGItem :: CFItem -> [Char]
prSRGItem (CFNonterm c) = "$" ++ prCFCat c
prSRGItem (CFTerm a) = prRegExp a

View File

@@ -24,6 +24,7 @@ import PPrCF
import PrLBNF
import PrGrammar
import MkGFC
import CFtoSRG
import Zipper
@@ -145,6 +146,7 @@ customGrammarPrinter =
[
(strCI "gfc", prCanon . stateGrammarST) -- DEFAULT
,(strCI "cf", prCF . stateCF)
,(strCI "srg", prSRG . stateCF)
,(strCI "lbnf", prLBNF . stateCF)
,(strCI "morpho", prMorpho . stateMorpho)
,(strCI "fullform",prFullForm . stateMorpho)

View File

@@ -351,7 +351,7 @@ q, quit: q
-printer=gf GF grammar
-printer=cf context-free grammar
*-printer=happy source file for Happy parser generator
*-printer=srg speech recognition grammar
-printer=srg speech recognition grammar
*-printer=haskell abstract syntax in Haskell, with transl to/from GF
-printer=morpho full-form lexicon, long format
*-printer=latex LaTeX file (for the tg command)

View File

@@ -1 +1 @@
module Today where today = "Tue Apr 13 13:53:49 CEST 2004"
module Today where today = "Fri Apr 16 18:06:59 CEST 2004"