-
Notifications
You must be signed in to change notification settings - Fork 0
/
expr.fortob
41 lines (39 loc) · 856 Bytes
/
expr.fortob
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
34
35
36
37
38
39
40
41
# infix expression parser
@expr[
$expr=[
$!=\;
%a=$!$term.apply:\\;
[$!.seekString="+"\.if:['='],[$!.seekString="-"\.if:['=']]].while: [
$a=$!.nextString="+"\.if:[
$a+$!$term.apply:
], [
$a-$!$term.apply:
]\\;
]\;
$a
]\;
$term=[
$!=\;
%b=$!$prim.apply:\\;
[$!.seekString="*"\.if:['='],[$!.seekString="/"\.if:['=']]].while: [
$b=$!.nextString="*"\.if:[
$b*$!$prim.apply:
], [
$b/$!$prim.apply:
]\\;
]\;
$b
]\;
$prim=[
$!=\;
$!.seekString="("\.if: [
$!.accept:"("\;
$expr.apply:$!\
$!.accept:")"\;
], [
$!.nextNumber
]
]\;
$\.push:$expr.apply:$!\\;
]\;
""+expr 2+(3*4)\.println;