diff options
| author | aarne <aarne@chalmers.se> | 2011-01-11 15:46:43 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2011-01-11 15:46:43 +0000 |
| commit | e7439d65b0e153434d3acc07df6e2a0972ee79ca (patch) | |
| tree | 36716eec18256eeb600b4a552d9cc80f8ad7f16f /gf-book/examples/chapter8/LogicEng.gf | |
| parent | 276327f7f264e770478a6d8c6e683266505b0a55 (diff) | |
gf-book web page index and toc
Diffstat (limited to 'gf-book/examples/chapter8/LogicEng.gf')
| -rw-r--r-- | gf-book/examples/chapter8/LogicEng.gf | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gf-book/examples/chapter8/LogicEng.gf b/gf-book/examples/chapter8/LogicEng.gf new file mode 100644 index 000000000..eae85d255 --- /dev/null +++ b/gf-book/examples/chapter8/LogicEng.gf @@ -0,0 +1,39 @@ +concrete LogicEng of Logic = open + SyntaxEng, (P = ParadigmsEng), SymbolicEng, Prelude in { +lincat + Stm = Text ; + Prop = {pos,neg : S ; isAtom : Bool} ; + Atom = Cl ; + Ind = NP ; + Dom = CN ; + Var = NP ; + [Prop] = ListS ; + [Var] = NP ; +lin + SProp p = mkText p.pos ; + And ps = complexProp (mkS and_Conj ps) ; + Or ps = complexProp (mkS or_Conj ps) ; + If A B = complexProp (mkS if_then_Conj (mkListS A.pos B.pos)) ; + Not A = complexProp A.neg ; + All xs A B = complexProp (mkS (mkAdv for_Prep + (mkNP all_Predet (mkNP a_Quant plNum (mkCN A xs)))) B.pos) ; + Exist xs A B = complexProp (mkS (mkAdv for_Prep + (mkNP somePl_Det (mkCN A xs))) B.pos) ; + PAtom p = + {pos = mkS p ; neg = mkS negativePol p ; isAtom = True} ; + IVar x = x ; + VString s = symb s ; + BaseProp A B = mkListS A.pos B.pos ; + ConsProp A As = mkListS A.pos As ; + BaseVar x = x ; + ConsVar x xs = mkNP and_Conj (mkListNP x xs) ; +oper + complexProp : S -> {pos,neg : S ; isAtom : Bool} = \s -> { + pos = s ; + neg = negS s ; + isAtom = False + } ; + negS : S -> S = \s -> mkS negativePol (mkCl (mkNP it_Pron) + (mkNP the_Quant (mkCN (mkCN (P.mkN "case")) s))) ; + if_Then_Conj : Conj = P.mkConj "if" "then" ; +} |
