mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| -- (c) 2009 Rami Shashati under LGPL
 | |
| 
 | |
| concrete FoodsPor of Foods = open Prelude in {
 | |
|   flags coding=utf8;
 | |
| 
 | |
| 	lincat
 | |
| 	  Comment = {s : Str} ;
 | |
| 	  Quality = {s : Gender => Number => Str} ;
 | |
| 	  Kind = {s : Number => Str ; g : Gender} ;
 | |
| 	  Item = {s : Str ; n : Number ; g : Gender } ;
 | |
| 
 | |
| 	lin
 | |
| 	  Pred item quality =
 | |
| 	    {s = item.s ++ copula ! item.n ++ quality.s ! item.g ! item.n } ;
 | |
| 	  This = det Sg (table {Masc => "este" ; Fem => "esta"}) ;
 | |
| 	  That = det Sg (table {Masc => "esse" ; Fem => "essa"}) ;
 | |
| 	  These = det Pl (table {Masc => "estes" ; Fem => "estas"}) ;
 | |
| 	  Those = det Pl (table {Masc => "esses" ; Fem => "essas"}) ;
 | |
| 
 | |
| 	  Mod quality kind = { s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ; g = kind.g } ;
 | |
| 
 | |
| 	  Wine = regNoun "vinho" Masc ;
 | |
| 	  Cheese = regNoun "queijo" Masc ;
 | |
| 	  Fish = regNoun "peixe" Masc ;
 | |
| 	  Pizza = regNoun "pizza" Fem ;
 | |
| 
 | |
|       Very a = { s = \\g,n => "muito" ++ a.s ! g ! n } ;
 | |
| 
 | |
|       Fresh = mkAdjReg "fresco" ;
 | |
|       Warm = mkAdjReg "quente" ;
 | |
|       Italian = mkAdjReg "Italiano" ;
 | |
|       Expensive = mkAdjReg "caro" ;
 | |
|       Delicious = mkAdjReg "delicioso" ;
 | |
|       Boring = mkAdjReg "chato" ;
 | |
| 
 | |
| 	param
 | |
| 	  Number = Sg | Pl ;
 | |
| 	  Gender = Masc | Fem ;
 | |
| 
 | |
| 	oper
 | |
| 	  QualityT : Type = {s : Gender => Number => Str} ;
 | |
| 
 | |
| 	  mkAdj : (_,_,_,_ : Str) -> QualityT = \bonito,bonita,bonitos,bonitas -> {
 | |
| 	  	s = table {
 | |
| 	  		Masc => table { Sg => bonito ; Pl => bonitos } ;
 | |
| 	  		Fem => table { Sg => bonita ; Pl => bonitas }
 | |
| 	    } ;
 | |
| 	  } ;
 | |
| 
 | |
| 	  -- regular pattern
 | |
| 	  adjSozinho : Str -> QualityT = \sozinho ->
 | |
|         let sozinh = Predef.tk 1 sozinho
 | |
|         in mkAdj sozinho (sozinh + "a") (sozinh + "os") (sozinh + "as") ;
 | |
| 
 | |
|       -- for gender-independent adjectives
 | |
|       adjUtil : Str -> Str -> QualityT = \util,uteis ->
 | |
|         mkAdj util util uteis uteis ;
 | |
| 
 | |
|       -- smart paradigm for adjcetives
 | |
|       mkAdjReg : Str -> QualityT = \a -> case last a of {
 | |
|       	"o" => adjSozinho a ;
 | |
|         "e" => adjUtil a (a + "s")
 | |
|       } ;
 | |
| 
 | |
|       ItemT : Type = {s : Str ; n : Number ; g : Gender } ;
 | |
| 
 | |
|       det : Number -> (Gender => Str) -> KindT -> ItemT =
 | |
|         \num,det,noun -> {s = det ! noun.g ++ noun.s ! num ; n = num ; g = noun.g } ;
 | |
| 
 | |
| 	  KindT : Type = {s : Number => Str ; g : Gender} ;
 | |
| 
 | |
| 	  noun : Str -> Str -> Gender -> KindT =
 | |
| 	    \animal,animais,gen -> {s = table {Sg => animal ; Pl => animais} ; g = gen } ;
 | |
| 
 | |
| 	  regNoun : Str -> Gender -> KindT =
 | |
| 	    \carro,gen -> noun carro (carro + "s") gen ;
 | |
| 
 | |
| 	  copula : Number => Str = table {Sg => "é" ; Pl => "são"} ;
 | |
| }
 |