-
Notifications
You must be signed in to change notification settings - Fork 138
/
demo.pir
128 lines (112 loc) · 2.85 KB
/
demo.pir
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Copyright (C) 2005-2010, Parrot Foundation.
.include "errors.pasm"
.sub _main
.local string x
.local string pattern
.local int istraced
.local pmc stdin
.local pmc rulesub
.local pmc pir
.local pmc exp
.local pmc match
.local pmc p6rule_compile
.local pmc p5regexp_compile
.local pmc glob_compile
.local int istrace
.local string gname
errorson .PARROT_ERRORS_PARAM_COUNT_FLAG
load_bytecode "PGE.pbc"
load_bytecode "dumper.pir"
load_bytecode "PGE/Dumper.pir"
load_bytecode "PGE/Glob.pir"
load_bytecode "PGE/Text.pir"
load_bytecode "PGE/Util.pir"
p6rule_compile = compreg "PGE::Perl6Regex"
glob_compile = compreg "PGE::Glob"
p5regexp_compile = compreg "PGE::P5Regex"
istrace = 0
null rulesub
read_loop:
print "\ninput \"regex <pattern>\", \"glob <pattern>\", \"save <name>\",\n"
print "target string, \"pir\", \"exp\", \"trace\", \"next\"\n"
$P0 = getinterp
stdin = $P0.'stdin_handle'()
x = stdin.'readline'()
length $I0, x
if $I0 < 1 goto end_demo
$I0 = index x, " "
if $I0 > 0 goto get_cmd
$I0 = index x, "\n"
get_cmd:
$S0 = substr x, 0, $I0
x = chopn x, 1
if $S0 == "next" goto match_next
if $S0 == "regex" goto make_p6rule
if $S0 == "glob" goto make_glob
if $S0 == "save" goto save_rule
if $S0 == "pir" goto print_pir
if $S0 == "exp" goto print_exp
if $S0 == "trace" goto toggle_trace
if $S0 == "p5regex" goto make_regexp
if_null rulesub, match_nopattern
match = rulesub(x)
match_result:
unless match goto match_fail
print "match succeeded\n"
$P0 = get_global "_dumper"
$P0(match, "$/")
goto read_loop
match_fail:
print "match failed\n"
goto read_loop
match_nopattern:
print "no pattern entered yet\n"
goto read_loop
match_next:
match."next"()
goto match_result
make_glob:
pattern = substr x, 5
(rulesub) = glob_compile(pattern)
goto read_loop
make_p6rule:
pattern = substr x, 5
(rulesub) = p6rule_compile(pattern)
goto read_loop
make_regexp:
pattern = substr x, 7
(rulesub) = p5regexp_compile(pattern)
goto read_loop
save_rule:
if_null rulesub, match_nopattern
x = substr x, 5
set_global x, rulesub
print "Saved as "
print x
print "\n"
goto read_loop
print_pir:
if_null rulesub, match_nopattern
print pir
goto read_loop
print_exp:
if_null rulesub, match_nopattern
$P0 = get_global "_dumper"
$P0(exp, "exp")
goto read_loop
toggle_trace:
istrace = not istrace
trace istrace
unless istrace goto trace_off
print "Tracing is now on\n"
goto read_loop
trace_off:
print "Tracing is now off\n"
goto read_loop
end_demo:
.end
# Local Variables:
# mode: pir
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir: