class Parser
Public Class Methods
new(istream)
click to toggle source
# File lib/parser.rb, line 7 def initialize(istream) @scan = Scanner.new(istream) end
Public Instance Methods
Expr()
click to toggle source
# File lib/parser.rb, line 28 def Expr() return RestExpr(Term()) end
Factor()
click to toggle source
# File lib/parser.rb, line 96 def Factor() t = @scan.getToken if t.type == :number return NumNode.new(t.lex.to_i) end if t.type == :keyword if t.lex == "R" return RecallNode.new else raise ParseError.new end end if t.type == :lparen expr = Expr() t = @scan.getToken if t.type == :rparen return expr else raise ParseError.new end end raise ParseError.new end
Prog()
click to toggle source
private
# File lib/parser.rb, line 16 def Prog() result = Expr() t = @scan.getToken() if t.type != :eof then print "Expected EOF. Found ", t.type, ".\n" raise ParseError.new end return result end
RestExpr(e)
click to toggle source
# File lib/parser.rb, line 32 def RestExpr(e) t = @scan.getToken() if t.type == :add then return RestExpr(AddNode.new(e,Term())) end if t.type == :sub then return RestExpr(SubNode.new(e,Term())) end @scan.putBackToken() return e end
RestTerm(e)
click to toggle source
# File lib/parser.rb, line 64 def RestTerm(e) t = @scan.getToken if t.type == :times return RestTerm(TimesNode.new(e, Storable())) end if t.type == :divide return RestTerm(DivideNode.new(e, Storable())) @scan.putBackToken end end
Storable()
click to toggle source
# File lib/parser.rb, line 78 def Storable() fact = Factor() t = @scan.getToken if t.type == :keyword if t.lex == "S" return StoreNode.new(fact) else raise ParseError.new end end @scan.putBackToken end
Term()
click to toggle source
# File lib/parser.rb, line 48 def Term() # Write your Term() code here. This code is just temporary # so you can try the calculator out before finishing it. # t = @scan.getToken() # if t.type == :number then # val = t.lex.to_i # return NumNode.new(val) # end # puts "Term not implemented\n" # raise ParseError.new end
parse()
click to toggle source
# File lib/parser.rb, line 11 def parse() return Prog() end