File: VarCalc.lg

package info (click to toggle)
frown 0.6.1-13
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 9,956 kB
  • sloc: haskell: 35,132; makefile: 228; csh: 35; yacc: 23
file content (33 lines) | stat: -rw-r--r-- 1,116 bytes parent folder | download | duplicates (6)
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
> module Calc where
> import Result
> import Char
>
> type Terminal                 =  Char
>
> %{
>
> Terminal                      =  guard {isDigit}  as "digit"
>                               |  '+'
>                               |  '*'
>                               |  '('
>                               |  ')';
>
> Nonterminal                   =  expr     {Integer}
>                               |  term     {Integer}
>                               |  factor   {Integer}
>                               |  numeral  {Integer};
>
> expr     {v1 + v2}            :  expr {v1},  '+',  term {v2};
>          {e}                  |  term {e};
> term     {v1 * v2}            :  term {v1},  '*',  factor {v2};
>          {e}                  |  factor {e};
> factor   {n}                  :  numeral {n};
>          {e}                  |  '(', expr {e}, ')';
> numeral  {encode c}           :  "digit" {c};
>          {n * 10 + encode c}  |  numeral {n}, "digit" {c}; 
>
> }%
>
> encode c                      =  toInteger (fromEnum  c - fromEnum '0')
>
> frown _                       =  fail "syntax error"