Class: Lrama::Parser

Inherits:
Object
  • Object
show all
Includes:
Report::Duration
Defined in:
lib/lrama/parser.rb,
lib/lrama/parser/token_scanner.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.



11
12
13
# File 'lib/lrama/parser.rb', line 11

def initialize(text)
  @text = text
end

Instance Method Details

#parseObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/lrama/parser.rb', line 15

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.compute_first_set
    grammar.validate!

    grammar
  end
end