Class: BlifUtils::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/blifutils/parser.rb

Class Method Summary collapse

Class Method Details

.parse(fileName, quiet: false) ⇒ Object



116
117
118
119
120
# File 'lib/blifutils/parser.rb', line 116

def self.parse (fileName, quiet: false)
	processedFileNames = []
	ast = self.parse_recursive(File.expand_path(fileName), processedFileNames, quiet)
	return ast
end

.parse_string(str, quiet: false) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/blifutils/parser.rb', line 123

def self.parse_string (str, quiet: false)
	lexems = BlifUtils::Language::Lexer::lex(str)

	begin
		ast = BlifUtils::Language::Parser::parse(lexems)
	rescue RLTK::NotInLanguage => e
		print_parse_error(e.current, 'String not in grammar.')
	rescue RLTK::BadToken => e
		print_parse_error(e.faultyToken, "Unexpected token: \"#{e.faultyToken.type.to_s}\". Token not present in grammar definition.")
	end

	# Delete file references from the AST
	ast.modelList.delete_if do |elem| 
		if elem.kind_of?(BlifUtils::AST::SubfileReference) then
			STDERR.puts "WARNING: Ignoring \".search #{elem.fileName}\"" unless quiet
			true
		else
			false
		end
	end

	ast.modelList.each do |model|
		model.commands.delete_if do |com| 
			if com.kind_of?(BlifUtils::AST::SubfileReference) then
				STDERR.puts "WARNING: Ignoring \".search #{com.fileName}\"" unless quiet
				true
			else
				false
			end
		end
	end

	return ast
end