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 "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

View File

@ -1,3 +1,3 @@
require 'parslet' require 'citrus'
require 'parser/salama' 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.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