change to citrus wip

This commit is contained in:
Torsten Ruger 2015-08-27 21:01:12 +03:00
parent 619780a913
commit 5261edbd30
3 changed files with 34 additions and 34 deletions

View File

@ -1,38 +1,38 @@
require_relative "basic_types"
require_relative "compound_types"
require_relative "tokens"
require_relative "keywords"
require_relative "control"
require_relative "expression"
require_relative "call_site"
require_relative "function_definition"
require_relative "module_definition"
require_relative "operators"
#require_relative "basic_types"
#require_relative "compound_types"
#require_relative "tokens"
#require_relative "keywords"
#require_relative "control"
#require_relative "expression"
#require_relative "call_site"
#require_relative "function_definition"
#require_relative "module_definition"
#require_relative "operators"
require 'ast/expression'
module Parser
# obviously a work in progress !!
# 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)
# so either 0, or 1, in other words maybe. Nice feature, but there are strings attached:
# 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
include BasicTypes
include CompoundTypes
include Tokens
include Keywords
include Control
include Expression
include CallSite
include FunctionDefinition
include Operators
include ModuleDef
Citrus.require "parser/basic"
Citrus.require "parser/keywords"
rule(:root_body) {(module_definition | class_definition | function_definition | expression |
operator_expression | call_site | basic_type | hash_constant | array_constant )}
rule(:root) { root_body.repeat.as(:expression_list) }
end
# class Salama < Parslet::Parser
# include BasicTypes
# include CompoundTypes
# include Tokens
# include Keywords
# include Control
# include Expression
# include CallSite
# include FunctionDefinition
# include Operators
# include ModuleDef
# rule(:root_body) {(module_definition | class_definition | function_definition | expression |
# operator_expression | call_site | basic_type | hash_constant | array_constant )}
# rule(:root) { root_body.repeat.as(:expression_list) }
# end
end

View File

@ -1,3 +1,3 @@
require 'parslet'
require 'citrus'
require 'parser/salama'
require 'parser/transform'
#require 'parser/transform'

View File

@ -13,6 +13,6 @@ Gem::Specification.new do |s|
s.require_paths = ['lib']
s.summary = 'Ruby parser for the salama machine'
s.add_dependency 'parslet', '~> 1.7.0'
s.add_dependency 'citrus', '~> 3.0.3'
end