summaryrefslogtreecommitdiff
path: root/tests/general/recogn.icn
blob: c55efd0aebed20f87cd88fd318b8964b6ad1fc7b (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
#
#          C F L   R E C O G N I T I O N
#

#  This program takes strings from standard input and determines
#  whether or not they are sentences in the language defined by <s>.

procedure main()
   local line
   while line := read() do
      if recogn(s,line) then write("accepted") else write("rejected")
end

procedure recogn(goal,text)
   return text ? (goal() & pos(0))
end

#  <s> ::= a <s> | <t> b | c

procedure s()
   suspend (="a" || s()) | (t() || ="b") | ="c"
end

#  <t> ::= d <s> d | e | f

procedure t()
   suspend (="d" || s() || ="d") | ="e" | ="f"
end