Class: Lrama::Parser

Inherits:
Object
  • Object
show all
Includes:
Report::Duration
Defined in:
lib/lrama/parser.rb

Overview

Parser for parse.y, generates a grammar

Defined Under Namespace

Classes: TokenScanner

Constant Summary collapse

T =
Lrama::Lexer::Token

Instance Method Summary collapse

Methods included from Report::Duration

enable, enabled?, #report_duration

Constructor Details

#initialize(text) ⇒ Parser

Returns a new instance of Parser.



62
63
64
# File 'lib/lrama/parser.rb', line 62

def initialize(text)
  @text = text
end

Instance Method Details

#parseObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/lrama/parser.rb', line 66

def parse
  report_duration(:parse) do
    lexer = Lexer.new(@text)
    grammar = Grammar.new
    process_prologue(grammar, lexer)
    parse_bison_declarations(TokenScanner.new(lexer.bison_declarations_tokens), grammar)
    parse_grammar_rules(TokenScanner.new(lexer.grammar_rules_tokens), grammar)
    process_epilogue(grammar, lexer)
    grammar.prepare
    grammar.compute_nullable
    grammar.validate!

    grammar
  end
end