change to citrus wip
This commit is contained in:
parent
619780a913
commit
5261edbd30
@ -1,38 +1,38 @@
|
|||||||
require_relative "basic_types"
|
#require_relative "basic_types"
|
||||||
require_relative "compound_types"
|
#require_relative "compound_types"
|
||||||
require_relative "tokens"
|
#require_relative "tokens"
|
||||||
require_relative "keywords"
|
#require_relative "keywords"
|
||||||
require_relative "control"
|
#require_relative "control"
|
||||||
require_relative "expression"
|
#require_relative "expression"
|
||||||
require_relative "call_site"
|
#require_relative "call_site"
|
||||||
require_relative "function_definition"
|
#require_relative "function_definition"
|
||||||
require_relative "module_definition"
|
#require_relative "module_definition"
|
||||||
require_relative "operators"
|
#require_relative "operators"
|
||||||
|
|
||||||
|
require 'ast/expression'
|
||||||
|
|
||||||
module Parser
|
module Parser
|
||||||
|
|
||||||
# obviously a work in progress !!
|
# obviously a work in progress !!
|
||||||
# We "compose" the parser from bits, divide and hopefully conquer
|
# We "compose" the parser from bits, divide and hopefully conquer
|
||||||
|
|
||||||
# a note about .maybe : .maybe is almost every respect the same as .repeat(0,1)
|
Citrus.require "parser/basic"
|
||||||
# so either 0, or 1, in other words maybe. Nice feature, but there are strings attached:
|
Citrus.require "parser/keywords"
|
||||||
# a maybe removes the 0 a sequence (array) to a single (hash). Thus 2 transformations are needed
|
|
||||||
# More work than the prettiness is worth, so only use .maybe on something that does not need capturing
|
|
||||||
|
|
||||||
class Salama < Parslet::Parser
|
# class Salama < Parslet::Parser
|
||||||
include BasicTypes
|
# include BasicTypes
|
||||||
include CompoundTypes
|
# include CompoundTypes
|
||||||
include Tokens
|
# include Tokens
|
||||||
include Keywords
|
# include Keywords
|
||||||
include Control
|
# include Control
|
||||||
include Expression
|
# include Expression
|
||||||
include CallSite
|
# include CallSite
|
||||||
include FunctionDefinition
|
# include FunctionDefinition
|
||||||
include Operators
|
# include Operators
|
||||||
include ModuleDef
|
# include ModuleDef
|
||||||
|
|
||||||
rule(:root_body) {(module_definition | class_definition | function_definition | expression |
|
# rule(:root_body) {(module_definition | class_definition | function_definition | expression |
|
||||||
operator_expression | call_site | basic_type | hash_constant | array_constant )}
|
# operator_expression | call_site | basic_type | hash_constant | array_constant )}
|
||||||
rule(:root) { root_body.repeat.as(:expression_list) }
|
# rule(:root) { root_body.repeat.as(:expression_list) }
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
require 'parslet'
|
require 'citrus'
|
||||||
require 'parser/salama'
|
require 'parser/salama'
|
||||||
require 'parser/transform'
|
#require 'parser/transform'
|
||||||
|
@ -13,6 +13,6 @@ Gem::Specification.new do |s|
|
|||||||
s.require_paths = ['lib']
|
s.require_paths = ['lib']
|
||||||
s.summary = 'Ruby parser for the salama machine'
|
s.summary = 'Ruby parser for the salama machine'
|
||||||
|
|
||||||
s.add_dependency 'parslet', '~> 1.7.0'
|
s.add_dependency 'citrus', '~> 3.0.3'
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user