13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/ibex/configuration/analysis_grammar.rb', line 13
def for_algorithm(grammar, algorithm)
contract = grammar.parser_contract
return grammar unless contract&.algorithm&.explicit
return grammar if contract.algorithm.value == algorithm
analysis_contract = IR::ParserContract.new(
algorithm: IR::ParserContract::Entry.new(:algorithm),
entries: contract.entries, cst_trivia: contract.cst_trivia
)
IR::Grammar.new(
class_name: grammar.class_name, superclass: grammar.superclass, start: grammar.start,
expect: grammar.expect, options: grammar.options, symbols: grammar.symbols,
productions: grammar.productions, user_code: grammar.user_code, conversions: grammar.conversions,
warnings: grammar.warnings, expect_rr: grammar.expect_rr, user_code_chunks: grammar.user_code_chunks,
source_provenance: grammar.source_provenance,
parser_parameters: grammar.parser_parameters, value_printers: grammar.value_printers,
grammar_tests: grammar.grammar_tests, recovery: grammar.recovery, lexer: grammar.lexer,
mode: grammar.mode, starts: grammar.starts, parser_contract: analysis_contract
)
end
|