Module: Rubasteme

Defined in:
lib/rubasteme.rb,
lib/rubasteme/ast.rb,
lib/rubasteme/error.rb,
lib/rubasteme/utils.rb,
lib/rubasteme/parser.rb,
lib/rubasteme/version.rb,
lib/rubasteme/ast/leaf_node.rb,
lib/rubasteme/ast/branch_node.rb,
lib/rubasteme/parser/phase1_parser.rb,
lib/rubasteme/parser/phase2_parser.rb,
lib/rubasteme/parser/derived_converter.rb

Defined Under Namespace

Modules: AST, Parser, Utils Classes: Error, MissingRightParenthesisError, NotImplementedYetError, SchemeSyntaxErrorError, UnexpectedTokenTypeError, UnsupportedFeatureError

Constant Summary collapse

EMSG =

:stopdoc:

{
  scheme_syntax_error: "syntax error: %s",
  unexpected_token_type: "unexpected token type: got=%s, expected=%s",
  missing_right_parenthesis: "missing right parenthesis",
  unsupported_feature: "unsupported feature: %s",
  not_implemented_yet: "not implemented yet: %s",
}
VERSION =
"0.1.7"
RELEASE =
"2021-06-09"

Class Method Summary collapse

Class Method Details

.lexer(obj) ⇒ Object



8
9
10
# File 'lib/rubasteme.rb', line 8

def self.lexer(obj)
  Rbscmlex::Lexer.new(obj)
end

.make_version(name) ⇒ Object



7
8
9
10
# File 'lib/rubasteme/version.rb', line 7

def self.make_version(name)
  mod_name = name.downcase.split("::").join(".")
  "(#{mod_name} :version #{VERSION} :release #{RELEASE})"
end

.parse(source) ⇒ Object



12
13
14
# File 'lib/rubasteme.rb', line 12

def self.parse(source)
  parser.parse(lexer(source))
end

.parserObject



5
6
7
# File 'lib/rubasteme/parser.rb', line 5

def self.parser
  Parser::Parser.new
end

.phase1_parse(source) ⇒ Object



5
6
7
# File 'lib/rubasteme/parser/phase1_parser.rb', line 5

def self.phase1_parse(source)
  Parser::Phase1Parser.new.parse(Rbscmlex.lexer(source))
end

.phase2_parse(source) ⇒ Object



5
6
7
8
# File 'lib/rubasteme/parser/phase2_parser.rb', line 5

def self.phase2_parse(source)
  nodes = Parser::Phase1Parser.new.parse(Rbscmlex.lexer(source))
  Parser::Phase2Parser.new.parse(nodes)
end

.write(ast_node, of = STDOUT) ⇒ Object



5
6
7
# File 'lib/rubasteme/ast.rb', line 5

def self.write(ast_node, of = STDOUT)
  of.puts ast_node.to_s
end