2014-04-27 15:30:32 +02:00
|
|
|
require_relative "basic_types"
|
2014-05-12 20:36:38 +02:00
|
|
|
require_relative "compound_types"
|
2014-04-27 17:13:10 +02:00
|
|
|
require_relative "tokens"
|
2014-04-27 20:12:42 +02:00
|
|
|
require_relative "keywords"
|
2014-05-12 11:20:31 +02:00
|
|
|
require_relative "control"
|
2014-05-10 10:14:34 +02:00
|
|
|
require_relative "expression"
|
2014-05-13 20:15:02 +02:00
|
|
|
require_relative "call_site"
|
2014-05-10 10:14:34 +02:00
|
|
|
require_relative "function_definition"
|
2014-05-30 09:42:43 +02:00
|
|
|
require_relative "module_definition"
|
2014-05-11 17:37:26 +02:00
|
|
|
require_relative "operators"
|
2014-04-24 14:43:20 +02:00
|
|
|
|
2014-04-27 14:44:34 +02:00
|
|
|
module Parser
|
2014-04-27 17:13:10 +02:00
|
|
|
|
2014-04-29 15:22:12 +02:00
|
|
|
# obviously a work in progress !!
|
2014-04-27 17:13:10 +02:00
|
|
|
# We "compose" the parser from bits, divide and hopefully conquer
|
|
|
|
|
2014-05-10 10:14:34 +02:00
|
|
|
# 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
|
|
|
|
|
2014-05-10 10:03:23 +02:00
|
|
|
class Crystal < Parslet::Parser
|
2014-04-27 15:30:32 +02:00
|
|
|
include BasicTypes
|
2014-05-27 14:36:51 +02:00
|
|
|
include CompoundTypes
|
2014-04-27 17:13:10 +02:00
|
|
|
include Tokens
|
2014-04-27 20:12:42 +02:00
|
|
|
include Keywords
|
2014-05-12 11:20:31 +02:00
|
|
|
include Control
|
2014-05-10 10:14:34 +02:00
|
|
|
include Expression
|
2014-05-13 20:15:02 +02:00
|
|
|
include CallSite
|
2014-05-11 17:37:26 +02:00
|
|
|
include FunctionDefinition
|
|
|
|
include Operators
|
2014-05-29 14:57:33 +02:00
|
|
|
include ModuleDef
|
2014-04-24 14:43:20 +02:00
|
|
|
|
2014-05-30 09:59:49 +02:00
|
|
|
rule(:root){ (module_definition | class_definition | function_definition | expression | call_site ).repeat }
|
2014-04-24 14:43:20 +02:00
|
|
|
end
|
|
|
|
end
|