Skip to content

Commit

Permalink
Merge pull request #344 from ydah/provide-standard-library-standardy
Browse files Browse the repository at this point in the history
Provide standard library as stdlib.y
  • Loading branch information
yui-knk authored Jan 24, 2024
2 parents 0e72202 + 7ac1f17 commit c7c9725
Show file tree
Hide file tree
Showing 39 changed files with 1,938 additions and 2,036 deletions.
12 changes: 10 additions & 2 deletions lib/lrama/command.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
module Lrama
class Command
LRAMA_LIB = File.realpath(File.join(File.dirname(__FILE__)))
STDLIB_FILE_PATH = File.join(LRAMA_LIB, 'grammar', 'stdlib.y')

def run(argv)
begin
options = OptionParser.new.parse(argv)
Expand All @@ -14,9 +17,14 @@ def run(argv)
warning = Lrama::Warning.new
text = options.y.read
options.y.close if options.y != STDIN
parser = Lrama::Parser.new(text, options.grammar_file, options.debug)
begin
grammar = parser.parse
grammar = Lrama::Parser.new(text, options.grammar_file, options.debug).parse
unless grammar.no_stdlib
stdlib_grammar = Lrama::Parser.new(File.read(STDLIB_FILE_PATH), STDLIB_FILE_PATH, options.debug).parse
grammar.insert_before_parameterizing_rules(stdlib_grammar.parameterizing_rules)
end
grammar.prepare
grammar.validate!
rescue => e
raise e if options.debug
message = e.message
Expand Down
11 changes: 10 additions & 1 deletion lib/lrama/grammar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class Grammar
:lex_param, :parse_param, :initial_action,
:symbols, :types,
:rules, :rule_builders,
:sym_to_rules
:sym_to_rules, :no_stdlib

def initialize(rule_counter)
@rule_counter = rule_counter
Expand All @@ -45,6 +45,7 @@ def initialize(rule_counter)
@undef_symbol = nil
@accept_symbol = nil
@aux = Auxiliary.new
@no_stdlib = false

append_special_symbols
end
Expand Down Expand Up @@ -136,6 +137,14 @@ def add_parameterizing_rule(rule)
@parameterizing_rule_resolver.add_parameterizing_rule(rule)
end

def parameterizing_rules
@parameterizing_rule_resolver.rules
end

def insert_before_parameterizing_rules(rules)
@parameterizing_rule_resolver.rules = rules + @parameterizing_rule_resolver.rules
end

def prologue_first_lineno=(prologue_first_lineno)
@aux.prologue_first_lineno = prologue_first_lineno
end
Expand Down
24 changes: 16 additions & 8 deletions lib/lrama/grammar/parameterizing_rule/resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module Lrama
class Grammar
class ParameterizingRule
class Resolver
attr_accessor :created_lhs_list
attr_accessor :rules, :created_lhs_list

def initialize
@rules = []
Expand All @@ -13,10 +13,6 @@ def add_parameterizing_rule(rule)
@rules << rule
end

def defined?(token)
!select_rules(token).empty?
end

def find(token)
select_rules(token).last
end
Expand All @@ -28,9 +24,21 @@ def created_lhs(lhs_s_value)
private

def select_rules(token)
@rules.select do |rule|
rule.name == token.rule_name &&
rule.required_parameters_count == token.args_count
rules = select_rules_by_name(token.rule_name)
rules = rules.select { |rule| rule.required_parameters_count == token.args_count }
if rules.empty?
raise "Invalid number of arguments. `#{token.rule_name}`"
else
rules
end
end

def select_rules_by_name(rule_name)
rules = @rules.select { |rule| rule.name == rule_name }
if rules.empty?
raise "Parameterizing rule does not exist. `#{rule_name}`"
else
rules
end
end
end
Expand Down
60 changes: 0 additions & 60 deletions lib/lrama/grammar/parameterizing_rules/builder.rb

This file was deleted.

36 changes: 0 additions & 36 deletions lib/lrama/grammar/parameterizing_rules/builder/base.rb

This file was deleted.

28 changes: 0 additions & 28 deletions lib/lrama/grammar/parameterizing_rules/builder/list.rb

This file was deleted.

28 changes: 0 additions & 28 deletions lib/lrama/grammar/parameterizing_rules/builder/nonempty_list.rb

This file was deleted.

28 changes: 0 additions & 28 deletions lib/lrama/grammar/parameterizing_rules/builder/option.rb

This file was deleted.

39 changes: 0 additions & 39 deletions lib/lrama/grammar/parameterizing_rules/builder/separated_list.rb

This file was deleted.

This file was deleted.

Loading

0 comments on commit c7c9725

Please sign in to comment.