home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ruby164.zip
/
rbemx164.zip
/
ruby
/
share
/
doc
/
racc-1.3.9
/
sample
/
calc-ja.y
< prev
next >
Wrap
Text File
|
2001-04-07
|
2KB
|
122 lines
#
# simple calc 2 (ja)
#
# This file contains Japanese characters (euc-jp) !!!
#
class Calcp
prechigh
nonassoc UMINUS
left '*' '/'
left '+' '-'
preclow
rule
target : exp
| /* none */ { result = 0 }
exp : exp '+' exp { result += val[2] }
| exp '-' exp { result -= val[2] }
| exp '*' exp { result *= val[2] }
| exp '/' exp { result /= val[2] }
| '(' exp ')' { result = val[1] }
| '-' NUMBER = UMINUS { result = -val[1] }
| NUMBER
end
---- header ----
#
# calc.rb : generated by racc
#
---- inner ----
def parse( str )
@q = []
while str.size > 0 do
case str
when /\A\s+/
when /\A\d+/
@q.push [:NUMBER, $&.to_i]
when /\A.|\n/
s = $&
@q.push [s, s]
end
str = $'
end
@q.push [false, '$']
do_parse
end
def next_token
@q.shift
end
---- footer ----
class Nemui < Exception; end
parser = Calcp.new
count = 0
scnt = 0
print "\n***********************"
print "\n─╢╣δ▓┌ñ¬╠≥ñ└ñ┴┼┼┬ε2╣µ╡í"
print "\n***********************\n\n"
print "╡óñΩñ┐ñ»ñ╩ñ├ñ┐ñΘQñ≥Ñ┐ÑñÑ╫ñ╖ñ╞ñ═\n"
while true do
print "\n"
print 'ikutu? > '
str = gets.chop!
break if /q/i === str
begin
val = parser.parse( str )
print 'kotae! = ', val, "\n"
scnt += 1
case scnt
when 5
print "\n╞»ñ¡ñΓñ╬ñ╟ñ╖ñτñ├ 5▓≤ñΓ╖╫╗╗ñ╖ñ┴ñπñ├ñ┐í¬\n\n"
when 8
print "\nñññ├ñ╤ññ╖╫╗╗ñ╣ñδñ≤ñ└ñ═í─\n\n"
when 9
print "\nñ═ñ¿í╝ñ├ ñΓñªñ─ñ½ñ∞ñ┐í╝í¬ ñΓñª╡┘ñΓñªñΦí╝\n\n"
when 10
print "\nñΓñªñ═ñδñ╬ñ├í¬í¬\n\n"
raise Nemui, "ñΓñªñ└ñßíú"
end
rescue ParseError
case count
when 0
print "\n ñññ╕ñ∩ñδñ├í¬\n"
when 1
print "\n ñΓñªñ├íóñ¬ñ│ñ├ñ┴ñπñªñΦí¬í¬\n"
when 2
print "\n ñΓñª╡÷ñ╖ñ╞ñóñ▓ñ╩ñññ≤ñ└ñ½ñΘñ├í¬í¬í¬\n\n\n"
sleep 0.5
print " ñ¿ñññ├í∙\n\n"
sleep(1)
raise
end
count += 1
rescue
print "\n ñ╡ñΦñ╩ñΘí─\n"
raise
end
end
print "\nñ╕ñπñóíóñ▐ñ┐ñ═ñ├\n\n"
sleep 0.5