change type to class name
although int is still allowed for integers (gets replaced though)
This commit is contained in:
parent
1b2802ecf4
commit
ab0a94bd51
@ -36,7 +36,7 @@ module Parser
|
||||
rule(:digit) { match('[0-9]') }
|
||||
rule(:exponent) { (str('e')| str('E')) }
|
||||
|
||||
rule(:type) { (str("int") | str("ref")).as(:type) >> space }
|
||||
rule(:type) { (str("int") | class_name).as(:type) >> space }
|
||||
# identifier must start with lower case
|
||||
# TODO rule forbit names like true_statements, because it starts with a keyword. a little looser please!
|
||||
rule(:name) { (keyword|type).absent? >> (match['a-z_'] >> match['a-zA-Z0-9_'].repeat).as(:name) >> space? }
|
||||
|
@ -1,7 +1,17 @@
|
||||
|
||||
#include is private in 1.9, who'd have known without travis
|
||||
Parslet::Context.send :include , AST::Sexp
|
||||
|
||||
Parslet::Context.class_eval do
|
||||
def type_sym t
|
||||
if( t.is_a? AST::Node )
|
||||
t = t.children.first
|
||||
else
|
||||
t = t.to_sym
|
||||
t = :Integer if t == :int
|
||||
end
|
||||
t
|
||||
end
|
||||
end
|
||||
module Parser
|
||||
class Transform < Parslet::Transform
|
||||
|
||||
@ -15,14 +25,14 @@ module Parser
|
||||
rule(:integer => simple(:value)) { s(:int ,value.to_i) }
|
||||
rule(:name => simple(:name)) { s(:name , name.to_sym) }
|
||||
# local variables
|
||||
rule(:type => simple(:type), :name => simple(:name)) { s(:field_def , type.to_sym , name.to_sym) }
|
||||
rule(:type => simple(:type), :name => simple(:name)) { s(:field_def , type_sym(type) , name.to_sym) }
|
||||
rule(:type => simple(:type), :name => simple(:name) , :value => simple(:value)) {
|
||||
s(:field_def , type.to_sym , name.to_sym , value ) }
|
||||
s(:field_def , type_sym(type) , name.to_sym , value ) }
|
||||
# class field
|
||||
rule(:field => simple(:field) , :type => simple(:type), :name => simple(:name)) {
|
||||
s(:class_field , type.to_sym , name.to_sym) }
|
||||
s(:class_field , type_sym(type) , name.to_sym) }
|
||||
rule(:field => simple(:field) , :type => simple(:type), :name => simple(:name) , :value => simple(:value)) {
|
||||
s(:class_field , type.to_sym , name.to_sym , value ) }
|
||||
s(:class_field , type_sym(type) , name.to_sym , value ) }
|
||||
|
||||
rule(:l_value => simple(:l_value) , :assign => simple(:assign) , :r_value => simple(:r_value)) {
|
||||
s(:assignment , l_value , r_value)
|
||||
@ -82,7 +92,7 @@ module Parser
|
||||
:function_name => simple(:function_name),
|
||||
:parameter_list => sequence(:parameter_list),
|
||||
:statements => sequence(:statements) , :end => simple(:e)) do
|
||||
s(:function, type.to_sym , function_name, s(:parameters , *parameter_list ),
|
||||
s(:function, type_sym(type) , function_name, s(:parameters , *parameter_list ),
|
||||
s(:statements , *statements))
|
||||
end
|
||||
|
||||
@ -91,7 +101,7 @@ module Parser
|
||||
:function_name => simple(:function_name),
|
||||
:parameter_list => sequence(:parameter_list),
|
||||
:statements => sequence(:statements) , :end => simple(:e)) do
|
||||
s(:function, type.to_sym , function_name, s(:parameters , *parameter_list ),
|
||||
s(:function, type_sym(type) , function_name, s(:parameters , *parameter_list ),
|
||||
s(:statements , *statements) , s(:receiver , *receiver))
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
class String
|
||||
|
||||
ref self.new_string(int len )
|
||||
String self.new_string(int len )
|
||||
len = len << 2
|
||||
return super.new_object( len)
|
||||
end
|
||||
@ -9,7 +9,7 @@ class String
|
||||
return self.length
|
||||
end
|
||||
|
||||
int plus(ref str)
|
||||
int plus(String str)
|
||||
my_length = self.length
|
||||
str_len = str.length()
|
||||
my_length = str_len + my_length
|
||||
@ -36,10 +36,10 @@ s(:statements,
|
||||
s(:class, :String,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :ref,
|
||||
s(:function, :String,
|
||||
s(:name, :new_string),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :len)),
|
||||
s(:parameter, :Integer, :len)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :len),
|
||||
@ -54,7 +54,7 @@ s(:statements,
|
||||
s(:receiver,
|
||||
s(:name, :super))))),
|
||||
s(:receiver, :self)),
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :length),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
@ -64,10 +64,10 @@ s(:statements,
|
||||
s(:name, :self)),
|
||||
s(:field,
|
||||
s(:name, :length)))))),
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :plus),
|
||||
s(:parameters,
|
||||
s(:parameter, :ref, :str)),
|
||||
s(:parameter, :String, :str)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :my_length),
|
||||
|
@ -9,9 +9,9 @@ s(:statements,
|
||||
s(:class, :Foo,
|
||||
s(:derives, :Object),
|
||||
s(:statements,
|
||||
s(:class_field, :int, :fff,
|
||||
s(:class_field, :Integer, :fff,
|
||||
s(:int, 3)),
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :func),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
|
@ -1,6 +1,6 @@
|
||||
class Pifi
|
||||
|
||||
int self.ofthen(int n , ref m)
|
||||
int self.ofthen(int n , Object m)
|
||||
n = n + m.index
|
||||
return n
|
||||
end
|
||||
@ -10,11 +10,11 @@ s(:statements,
|
||||
s(:class, :Pifi,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :ofthen),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n),
|
||||
s(:parameter, :ref, :m)),
|
||||
s(:parameter, :Integer, :n),
|
||||
s(:parameter, :Object, :m)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :n),
|
||||
|
@ -12,10 +12,10 @@ s(:statements,
|
||||
s(:class, :Ifi,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :ofthen),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:if_statement,
|
||||
s(:condition,
|
||||
|
@ -8,7 +8,7 @@ s(:statements,
|
||||
s(:class, :Foo,
|
||||
s(:derives, :Object),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :test),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
|
@ -9,12 +9,12 @@ s(:statements,
|
||||
s(:class, :Opers,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :x)),
|
||||
s(:parameter, :Integer, :x)),
|
||||
s(:statements,
|
||||
s(:field_def, :int, :abba,
|
||||
s(:field_def, :Integer, :abba,
|
||||
s(:int, 5)),
|
||||
s(:return,
|
||||
s(:operator_value, :+,
|
||||
|
@ -6,4 +6,4 @@ s(:statements,
|
||||
s(:class, :Foo,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:class_field, :int, :x))))
|
||||
s(:class_field, :Integer, :x))))
|
||||
|
@ -1,12 +1,12 @@
|
||||
int self.length( ref x )
|
||||
int self.length( Object x )
|
||||
return 5
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :length),
|
||||
s(:parameters,
|
||||
s(:parameter, :ref, :x)),
|
||||
s(:parameter, :Object, :x)),
|
||||
s(:statements,
|
||||
s(:return,
|
||||
s(:int, 5))),
|
||||
|
@ -11,10 +11,10 @@ int fibonaccit(int n)
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :fibonaccit),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :a),
|
||||
|
@ -4,12 +4,12 @@ int foo(int x)
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :x)),
|
||||
s(:parameter, :Integer, :x)),
|
||||
s(:statements,
|
||||
s(:field_def, :int, :a,
|
||||
s(:field_def, :Integer, :a,
|
||||
s(:int, 5)),
|
||||
s(:return,
|
||||
s(:name, :a)))))
|
||||
|
@ -1,4 +1,4 @@
|
||||
ref ofthen(int n)
|
||||
int ofthen(int n)
|
||||
if(0)
|
||||
isit = 42
|
||||
else
|
||||
@ -7,10 +7,10 @@ ref ofthen(int n)
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :ref,
|
||||
s(:function, :Integer,
|
||||
s(:name, :ofthen),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:if_statement,
|
||||
s(:condition,
|
||||
|
@ -3,7 +3,7 @@ int foo()
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
|
@ -4,12 +4,12 @@ int foo(int x)
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :x)),
|
||||
s(:parameter, :Integer, :x)),
|
||||
s(:statements,
|
||||
s(:field_def, :int, :abba,
|
||||
s(:field_def, :Integer, :abba,
|
||||
s(:int, 5)),
|
||||
s(:assignment,
|
||||
s(:name, :abba),
|
||||
|
@ -1,15 +1,15 @@
|
||||
int retvar(ref n)
|
||||
int retvar(Object n)
|
||||
int i = n.layout
|
||||
return i
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :retvar),
|
||||
s(:parameters,
|
||||
s(:parameter, :ref, :n)),
|
||||
s(:parameter, :Object, :n)),
|
||||
s(:statements,
|
||||
s(:field_def, :int, :i,
|
||||
s(:field_def, :Integer, :i,
|
||||
s(:field_access,
|
||||
s(:receiver,
|
||||
s(:name, :n)),
|
||||
|
@ -7,10 +7,10 @@ int retvar(int n)
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :retvar),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:if_statement,
|
||||
s(:condition,
|
||||
|
@ -6,10 +6,10 @@ int retvar(int n )
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :retvar),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:while_statement,
|
||||
s(:condition,
|
||||
|
@ -1,13 +1,13 @@
|
||||
int foo( int n ,ref m)
|
||||
int foo( int n ,String m)
|
||||
return n
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n),
|
||||
s(:parameter, :ref, :m)),
|
||||
s(:parameter, :Integer, :n),
|
||||
s(:parameter, :String, :m)),
|
||||
s(:statements,
|
||||
s(:return,
|
||||
s(:name, :n)))))
|
||||
|
@ -1,4 +1,4 @@
|
||||
ref fibonaccit(int n)
|
||||
Biggie fibonaccit(int n)
|
||||
a = 0
|
||||
while(n)
|
||||
some = 43
|
||||
@ -7,10 +7,10 @@ ref fibonaccit(int n)
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :ref,
|
||||
s(:function, :Biggie,
|
||||
s(:name, :fibonaccit),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :a),
|
||||
|
@ -1,12 +1,12 @@
|
||||
int foo(ref x)
|
||||
int foo(Class x)
|
||||
a = 1
|
||||
end
|
||||
-- -- --
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters,
|
||||
s(:parameter, :ref, :x)),
|
||||
s(:parameter, :Class, :x)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :a),
|
||||
|
@ -9,7 +9,7 @@ s(:statements,
|
||||
s(:class, :FooBo,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :main),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
|
@ -1,10 +1,9 @@
|
||||
class Object
|
||||
int foo(ref x)
|
||||
int foo(String x)
|
||||
a = 5
|
||||
end
|
||||
end
|
||||
class Other < Object
|
||||
|
||||
int foo()
|
||||
foo( 3 )
|
||||
end
|
||||
@ -14,10 +13,10 @@ s(:statements,
|
||||
s(:class, :Object,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters,
|
||||
s(:parameter, :ref, :x)),
|
||||
s(:parameter, :String, :x)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :a),
|
||||
@ -25,7 +24,7 @@ s(:statements,
|
||||
s(:class, :Other,
|
||||
s(:derives, :Object),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :foo),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
|
@ -20,10 +20,10 @@ s(:statements,
|
||||
s(:class, :Object,
|
||||
s(:derives, nil),
|
||||
s(:statements,
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :fibonaccit),
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:parameter, :Integer, :n)),
|
||||
s(:statements,
|
||||
s(:assignment,
|
||||
s(:name, :a),
|
||||
@ -57,7 +57,7 @@ s(:statements,
|
||||
s(:operator_value, :-,
|
||||
s(:name, :n),
|
||||
s(:int, 1))))))),
|
||||
s(:function, :int,
|
||||
s(:function, :Integer,
|
||||
s(:name, :main),
|
||||
s(:parameters),
|
||||
s(:statements,
|
||||
|
Loading…
x
Reference in New Issue
Block a user