retrying with the root of the directory

comes from finally tightning the root and not allowing random
expression code ala ruby
This commit is contained in:
Torsten Ruger 2015-10-09 17:23:43 +03:00
parent f7dcf2a2ff
commit 97cf5e5bea
4 changed files with 11 additions and 12 deletions

View File

@ -38,7 +38,7 @@ Syntax (and semantics) of Phisol are just forming, but some things are clear:
- call syntax as already discussed, ie message based - call syntax as already discussed, ie message based
Some things we shall leave behind from the ruby approach are a lot of sugar, like missing brackets, Some things we shall leave behind from the ruby approach are a lot of sugar, like missing brackets,
random code everywhere, expressions galore . . . random code everywhere, statements galore . . .
### Parser ### Parser
@ -52,10 +52,10 @@ Most names are quite self explanatory, but here is a list:
- call_site is a function call. May be qualified, but currently must still have braches - call_site is a function call. May be qualified, but currently must still have braches
- compound types are hash and array definitions. Hashes still need curlies - compound types are hash and array definitions. Hashes still need curlies
- control is if statement which still must have an else - control is if statement which still must have an else
- expression is a helper for all code allowed in a function - statement is a helper for all code allowed in a function
- function definition must have braces too - function definition must have braces too
- keywords is just a list of them - keywords is just a list of them
- operator expression are binary operators (see also below). There's a surprising amount - operator statement are binary operators (see also below). There's a surprising amount
- return statement are straightforward - return statement are straightforward
- while still needs a do, though i think in ruby a newline is sufficient - while still needs a do, though i think in ruby a newline is sufficient

View File

@ -8,7 +8,7 @@ module ParserHelper
def self.included(base) def self.included(base)
base.send :include, InstanceMethods #provides helpers and setup base.send :include, InstanceMethods #provides helpers and setup
base.send :include, AST::if_true base.send :include, AST::true_statements
base.send :extend, ClassMethods #gets the method creation going base.send :extend, ClassMethods #gets the method creation going
end end

View File

@ -17,10 +17,3 @@ require 'salama-reader'
require "minitest" require "minitest"
require "minitest/autorun" require "minitest/autorun"
# for testing add expression as allowed root
# bit of a hack: the directory name should be passed as the root if the parse fails
# but moving on (and coming back)
Parser::Salama.class_eval do
rule(:root_body) {( class_definition | function_definition | expression )}
end

View File

@ -10,7 +10,13 @@ class TestAll < MiniTest::Test
def check_file file def check_file file
inn , out = File.new(file).read.split(SEPERATOR) inn , out = File.new(file).read.split(SEPERATOR)
sexp = eval(out) sexp = eval(out)
syntax = Parser::Salama.new.parse_with_debug(inn) begin
syntax = Parser::Salama.new.parse(inn)
rescue
root = file.split("/")[2]
parser = Parser::Salama.new.send root.to_sym
syntax = parser.parse_with_debug(inn )
end
result = Parser::Transform.new.apply(syntax) result = Parser::Transform.new.apply(syntax)
equal = (sexp == result) equal = (sexp == result)
unless equal unless equal