summaryrefslogtreecommitdiff
path: root/grammars/resource/russian/DatabaseRus.gf
blob: 289e002a1648b59ed28d5772a5059cc4d3bd2872 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
concrete DatabaseRus of Database = open Prelude,Syntax,English,Predication,Paradigms in {

flags lexer=text ; unlexer=text ; coding=utf8 ;

lincat 
  Phras      = SS1 Bool ;            -- long or short form
  Subject    = NP ;
  Noun       = CN ;  
  Property   = AP ;
  Comparison = AdjDeg ;
  Relation   = Adj2 ;
  Feature    = Fun ;
  Value      = NP ;
  Name       = ProperName ;

lin
  LongForm  sent = ss (sent.s ! True ++ "?") ;
  ShortForm sent = ss (sent.s ! False ++ "?") ;

oper
  mkSent : SS -> SS -> SS1 Bool = \long, short -> 
    {s = table {b => if_then_else Str b long.s short.s}} ;

  mkSentPrel : Str -> SS -> SS1 Bool = \prel, matter -> 
    mkSent (ss (prel ++ matter.s)) matter ;

  mkSentSame : SS -> SS1 Bool = \s -> 
    mkSent s s ;

lin
  WhichAre A B = mkSent (defaultQuestion (IntVP (NounIPMany A) (PosA B)))
                        (defaultNounPhrase (IndefManyNP (ModAdj B A))) ;

  IsIt Q A   = mkSentSame (defaultQuestion (QuestVP Q (PosA A))) ;

  MoreThan   = ComparAdjP ;
  TheMost    = SuperlNP ;
  Relatively C _  = PositAdjP C ; 

  RelatedTo  = ComplAdj ;

  FeatureOf = appFun1 ;
  ValueOf F V = appFun1 F (UsePN V) ;

  WithProperty A B = ModAdj B A ;

  Individual = UsePN ;

  AllN = DetNP AllDet ;
  MostN = DetNP MostDet ;
  EveryN = DetNP EveryDet ;

-- only these are language-dependent

  Any = detNounPhrase anyPlDet ; --- in the sense "some", not "all"

  IsThere A  = mkSentPrel ["есть ли"]  (defaultNounPhrase (IndefOneNP A)) ;
  AreThere A = mkSentPrel ["есть ли"] (defaultNounPhrase (IndefManyNP A)) ;

  WhatIs V   = mkSentPrel ["какой"] (defaultNounPhrase V) ;
};