1
0
forked from GitHub/gf-core

extended unix grammars with character-based spelling

This commit is contained in:
aarne
2006-04-13 14:19:27 +00:00
parent 256b593ae5
commit 3d7c4e80d7
10 changed files with 271 additions and 31 deletions

View File

@@ -1857,7 +1857,7 @@ they can be used as arguments. For example:
-- e.g. (StreetAddress 10 "Downing Street") : Address
```
The linearization type is ``{s : Str}`` for all these categories.
==More concepts of abstract syntax==
@@ -1922,16 +1922,30 @@ documents:
However, to give a flavour of both using and writing resource grammars,
we have created a miniature resource, which resides in the
subdirectory [``resource`` resource]. Its API consists of the following
modules:
- [Syntax resource/Syntax.gf]: syntactic structures, language-independent
- [LexEng resource/LexEng.gf]: lexical paradigms, English
- [LexIta resource/LexIta.gf]: lexical paradigms, Italian
three modules:
[Syntax resource/Syntax.gf] - syntactic structures, language-independent:
```
```
[LexEng resource/LexEng.gf] - lexical paradigms, English:
```
```
[LexIta resource/LexIta.gf] - lexical paradigms, Italian:
```
```
Only these three modules should be ``open``ed in applications.
The implementations of the resource are given in the following four modules:
- [MorphoEng resource/MorphoEng.gf],
[MorphoIta resource/MorphoIta.gf]: low-level morphology
[MorphoEng resource/MorphoEng.gf],
```
```
[MorphoIta resource/MorphoIta.gf]: low-level morphology
- [SyntaxEng resource/SyntaxEng.gf].
[SyntaxIta resource/SyntaxIta.gf]: definitions of syntactic structures

51
examples/unix/Char.gf Normal file
View File

@@ -0,0 +1,51 @@
abstract Char = {
cat
[Chr] {1} ; Chr ; Letter ;
fun
C_dot : Chr ;
C_pipe : Chr ;
C_hyphen : Chr ;
CSmall : Letter -> Chr ;
CCap : Letter -> Chr ;
CC : Letter -> Chr ;
CDig_0 : Chr ;
CDig_1 : Chr ;
CDig_2 : Chr ;
CDig_3 : Chr ;
CDig_4 : Chr ;
CDig_5 : Chr ;
CDig_6 : Chr ;
CDig_7 : Chr ;
CDig_8 : Chr ;
CDig_9 : Chr ;
L_a : Letter ;
L_b : Letter ;
L_c : Letter ;
L_d : Letter ;
L_e : Letter ;
L_f : Letter ;
L_g : Letter ;
L_h : Letter ;
L_i : Letter ;
L_j : Letter ;
L_k : Letter ;
L_l : Letter ;
L_m : Letter ;
L_n : Letter ;
L_o : Letter ;
L_p : Letter ;
L_q : Letter ;
L_r : Letter ;
L_s : Letter ;
L_t : Letter ;
L_u : Letter ;
L_v : Letter ;
L_w : Letter ;
L_x : Letter ;
L_y : Letter ;
L_z : Letter ;
}

52
examples/unix/CharEng.gf Normal file
View File

@@ -0,0 +1,52 @@
concrete CharEng of Char = open Prelude in {
lin
BaseChr c = c ;
ConsChr = infixSS "," ;
C_dot = ss "dot" ;
C_pipe = ss "pipe" ;
C_hyphen = ss (variants {"dash" ; "hyphen" ; "minus"}) ;
CSmall = prefixSS "small" ;
CCap = prefixSS "capital" ;
CC c = c ;
CDig_0 = ss "0" ;
CDig_1 = ss "1" ;
CDig_2 = ss "2" ;
CDig_3 = ss "3" ;
CDig_4 = ss "4" ;
CDig_5 = ss "5" ;
CDig_6 = ss "6" ;
CDig_7 = ss "7" ;
CDig_8 = ss "8" ;
CDig_9 = ss "9" ;
L_a = ss "A" ;
L_b = ss "B" ;
L_c = ss "C" ;
L_d = ss "D" ;
L_e = ss "E" ;
L_f = ss "F" ;
L_g = ss "G" ;
L_h = ss "H" ;
L_i = ss "I" ;
L_j = ss "J" ;
L_k = ss "K" ;
L_l = ss "L" ;
L_m = ss "M" ;
L_n = ss "N" ;
L_o = ss "O" ;
L_p = ss "P" ;
L_q = ss "Q" ;
L_r = ss "R" ;
L_s = ss "S" ;
L_t = ss "T" ;
L_u = ss "U" ;
L_v = ss "V" ;
L_w = ss "W" ;
L_x = ss "X" ;
L_y = ss "Y" ;
L_z = ss "Z" ;
}

67
examples/unix/CharUni.gf Normal file
View File

@@ -0,0 +1,67 @@
concrete CharUni of Char = open Prelude in {
param
LForm = LCap | LSma ;
oper
chr : Str -> Str -> {s : LForm => Str} = \c,C -> {
s = table {
LCap => C ;
LSma => c
}
} ;
lincat
Letter = {s : LForm => Str} ;
lin
BaseChr c = c ;
ConsChr = infixSS "&+" ;
C_dot = ss "." ;
C_pipe = ss "|" ;
C_hyphen = ss "-" ;
CSmall c = ss (c.s ! LSma) ;
CCap c = ss (c.s ! LCap) ;
CC c = ss (c.s ! LSma) ;
CDig_0 = ss "0" ;
CDig_1 = ss "1" ;
CDig_2 = ss "2" ;
CDig_3 = ss "3" ;
CDig_4 = ss "4" ;
CDig_5 = ss "5" ;
CDig_6 = ss "6" ;
CDig_7 = ss "7" ;
CDig_8 = ss "8" ;
CDig_9 = ss "9" ;
L_a = chr "a" "A" ;
L_b = chr "b" "B" ;
L_c = chr "c" "C" ;
L_d = chr "d" "D" ;
L_e = chr "e" "E" ;
L_f = chr "f" "F" ;
L_g = chr "g" "G" ;
L_h = chr "h" "H" ;
L_i = chr "i" "I" ;
L_j = chr "j" "J" ;
L_k = chr "k" "K" ;
L_l = chr "l" "L" ;
L_m = chr "m" "M" ;
L_n = chr "n" "N" ;
L_o = chr "o" "O" ;
L_p = chr "p" "P" ;
L_q = chr "q" "Q" ;
L_r = chr "r" "R" ;
L_s = chr "s" "S" ;
L_t = chr "t" "T" ;
L_u = chr "u" "U" ;
L_v = chr "v" "V" ;
L_w = chr "w" "W" ;
L_x = chr "x" "X" ;
L_y = chr "y" "Y" ;
L_z = chr "z" "Z" ;
}

View File

@@ -1,24 +1,43 @@
abstract Unix = {
abstract Unix = Char ** {
cat
S ;
Line ;
Command ;
File ;
S ; -- whole command line
Command ; -- one command
File ; -- file name
Word ; -- string e.g. in grep
[Word] {1} ; --
fun
Pipe : Command -> S -> S ;
Comm : Command -> S ;
-- Catch-all: command dictated letter by letter.
CommWords : [Word] -> Command ;
-- General command-line structure.
Redirect : S -> File -> S ; -- cs >f
Pipe : S -> Command -> S ; -- cs | c
Comm : Command -> S ; -- c
--- This would be cool, but is it supported by speech recognition?
--- CommOpt : (c : Command) -> [Option c] -> S ; -- c -o -k
WhatTime : Command ;
WhatDate : Command ;
WhereNow : Command ;
Remove : File -> Command ;
Copy : File -> File -> Command ;
Linecount : File -> Command ;
Wordcount : File -> Command ;
Remove : File -> Command ;
Copy : File -> File -> Command ;
Linecount : File -> Command ;
Wordcount : File -> Command ;
Grep : Word -> File -> Command ;
Cat : File -> Command ;
Name : String -> File ;
It : File ;
It : File ; -- no file name - contents received from pipe
FileChars : [Chr] -> File ;
WordChars : [Chr] -> Word ;
FileSuffix : Word -> File ; -- *suff
FilePrefix : Word -> File ; -- pref*
}

View File

@@ -1,8 +1,8 @@
--# -path=.:prelude
concrete UnixEng of Unix = open Prelude in {
concrete UnixEng of Unix = CharEng ** open Prelude in {
flags unlexer=textlit ; lexer=textlit ;
flags lexer=text ;
{-
lincat
@@ -13,6 +13,9 @@ concrete UnixEng of Unix = open Prelude in {
-}
lin
CommWords w = w ;
Redirect = infixSS (optStr "and" ++ ["write the result to"]) ;
Pipe = infixSS "then" ;
Comm c = c ;
@@ -23,8 +26,18 @@ concrete UnixEng of Unix = open Prelude in {
Copy x y = ss ("copy" ++ x.s ++ "to" ++ y.s) ;
Linecount = prefixSS ["how many lines has"] ;
Wordcount = prefixSS ["how many words has"] ;
Grep x y = ss (["show the lines containing"] ++ x.s ++ "in" ++ y.s) ;
Cat = prefixSS ["show the contents of"] ;
Name x = x ;
It = ss "it" ;
FileChars = prefixSS (optStr ["the file"]) ;
WordChars = prefixSS (optStr ["the word"]) ;
FileSuffix = prefixSS ["all files ending with"] ;
FilePrefix = prefixSS ["all files beginning with"] ;
BaseWord w = w ;
ConsWord = infixSS "space" ;
}

View File

@@ -1,8 +1,8 @@
--# -path=.:prelude
concrete UnixUni of Unix = open Prelude in {
concrete UnixUni of Unix = CharUni ** open Prelude in {
flags unlexer=codelit ; lexer=codelit ;
flags unlexer=bind ;
{-
lincat
@@ -13,6 +13,9 @@ concrete UnixUni of Unix = open Prelude in {
-}
lin
CommWords w = w ;
Redirect = infixSS ">" ;
Pipe = infixSS "|" ;
Comm c = c ;
@@ -23,8 +26,18 @@ concrete UnixUni of Unix = open Prelude in {
Copy x y = ss ("cp" ++ x.s ++ y.s) ;
Linecount = prefixSS ["wc -l"] ;
Wordcount = prefixSS ["wc -w"] ;
Grep x y = ss ("grep" ++ x.s ++ y.s) ;
Cat = prefixSS "cat" ;
Name x = x ;
It = ss [] ;
FileChars c = c ;
WordChars c = c ;
FileSuffix = prefixSS ["* &+"] ;
FilePrefix = postfixSS ["&+ *"] ;
BaseWord w = w ;
ConsWord = cc2 ;
}

View File

@@ -30,7 +30,7 @@ concrete CatEng of Cat = CommonX ** open ResEng, Prelude in {
-- Relative
RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
RP = {s : Case => Str ; a : RAgr} ;
RP = {s : RCase => Str ; a : RAgr} ;
-- Verb

View File

@@ -15,20 +15,30 @@ concrete RelativeEng of Relative = CatEng ** open ResEng in {
RNoAg => ag ;
RAg a => a
} ;
cl = mkClause (rp.s ! Nom) agr vp
cl = mkClause (rp.s ! RC Nom) agr vp
in
cl.s ! t ! ant ! b ! ODir
} ;
-- Preposition stranding: "that we are looking at". Pied-piping is
-- deferred to $ExtEng.gf$ ("at which we are looking").
RelSlash rp slash = {
s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
s = \\t,a,p,_ => rp.s ! RC Acc ++ slash.s ! t ! a ! p ! ODir ++ slash.c2
} ;
FunRP p np rp = {
s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ;
s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep ;
a = RAg np.a
} ;
IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ;
IdRP = {
s = table {
RC Gen => "whose" ;
RC _ => "that" ;
RPrep => "which"
} ;
a = RNoAg
} ;
}

View File

@@ -62,6 +62,7 @@ resource ResEng = ParamX ** open Prelude in {
--2 For $Relative$
RAgr = RNoAg | RAg {n : Number ; p : Person} ;
RCase = RPrep | RC Case ;
--2 For $Numeral$