Skip to content

Commit 05bb17e

Browse files
committed
week7 harjutused lahendused
1 parent 381962e commit 05bb17e

5 files changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
grammar SimpleArgList;
2+
@header { package week7.harjutused; }
3+
4+
// __Argumentide list__
5+
// peab ära tundma kõik sellised funktsiooniväljakutsed: f(), f(w), f(w, w), f(w, w, w)
6+
// eeldame, et muutujanimed on alati w ja funktsiooninimed on f.
7+
// eeldame, et tühikuid ja tabulaatoreid võib olla igalpool suvaline arv.
8+
9+
// Ära seda reeglit ümber nimeta, selle kaudu testitakse grammatikat
10+
init : functionCall EOF;
11+
12+
functionCall
13+
: 'f' '(' argsList? ')'
14+
;
15+
16+
argsList
17+
: Word (',' Word)*
18+
;
19+
20+
Word : 'w';
21+
22+
WS: [ \t]+ -> skip;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
grammar SimpleBinaryTree;
2+
@header { package week7.harjutused; }
3+
4+
// __Kahendpuu__
5+
// Oletame, et kahendpuu lehtedes on ainult arvud 0 ja 1, siis defineeri keel,
6+
// kus on kõik võimalikud puud.
7+
// Konstruktorite nimed on Leaf(int v) ja Node(Tree left, Tree right)
8+
// ehk teiste sõnadega defineerime puude hulga järgmiselt:
9+
//
10+
// - Arvudeks on meil 0 ja 1.
11+
// - Kui v on arv, siis Leaf(v) on puu.
12+
// - Kui l ja r on puud, siis Node(l,r) on samuti puu.
13+
//
14+
// Keel sisaldab seega sõnu nagu:
15+
// Node(Leaf(1), Node(Leaf(0), Leaf(1)))
16+
17+
// eeldame, et tühikuid ja tabulaatoreid võib olla igalpool suvaline arv
18+
19+
// Ära seda reeglit ümber nimeta, selle kaudu testitakse grammatikat
20+
init : tree EOF;
21+
22+
tree
23+
: Leaf '(' Arv ')'
24+
| Node '(' tree ',' tree ')'
25+
;
26+
27+
Arv : [01];
28+
Leaf : 'Leaf';
29+
Node : 'Node';
30+
31+
WS: [ \t]+ -> skip;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
grammar SimpleBinaryTreeAlt;
2+
@header { package week7.harjutused; }
3+
4+
// __Kahendpuu variatsioon__
5+
// Edasi modifitseeri oma grammatikat, et see defineeriks sellised puud,
6+
// millel on väärtused sisetippudes, näiteks järgmine sõna:
7+
// Node(null, 1, Node(null, 0, null))
8+
//
9+
// - Arvudeks võtame endiselt 0 ja 1.
10+
// - Konstant null on pisike puu.
11+
// - Kui v on arv ning l ja r on puud, siis Node(l,v,r) on samuti puu.
12+
13+
// eeldame, et tühikuid ja tabulaatoreid võib olla igalpool suvaline arv
14+
15+
// Ära seda reeglit ümber nimeta, selle kaudu testitakse grammatikat
16+
init : tree EOF;
17+
18+
tree
19+
: Node '(' tree ',' Arv ',' tree ')'
20+
| Null
21+
;
22+
23+
Arv : [01];
24+
Null : 'null';
25+
Node : 'Node';
26+
27+
WS: [ \t]+ -> skip;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
grammar SimpleLausearvutus;
2+
@header { package week7.harjutused; }
3+
4+
// __Lausearvutuse valem__
5+
// Eeldades, et lausemuutujateks on meil X, Y ja Z, siis saame sõnu nagu näiteks:
6+
// (¬(X&Y)→(X∨Z))
7+
8+
// Ole ettevaatlik et kasutad õigeid sümboleid:
9+
// ¬ & ∨ → ↔
10+
11+
// Ära seda reeglit ümber nimeta, selle kaudu testitakse grammatikat
12+
init : valem EOF;
13+
14+
valem
15+
: Ident
16+
| '¬' valem
17+
| '(' valem ('&' | '' | '' | '') valem ')'
18+
;
19+
20+
Ident : [XYZ];
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
grammar SimpleRegExp;
2+
@header { package week7.harjutused; }
3+
4+
// __Regulaaravaldise põhjal__
5+
// peab ära tundma täpselt samad sõnad nagu see regulaaravaldis: (a|b)*c
6+
7+
// Ära seda reeglit ümber nimeta, selle kaudu testitakse grammatikat
8+
init : Word EOF;
9+
10+
Word : [ab]* 'c';

0 commit comments

Comments
 (0)