p-lang 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/parser/nodes.rb DELETED
@@ -1,212 +0,0 @@
1
- module PLang
2
-
3
- module NStatements
4
- def build
5
- elements.collect { |element| PLang::Ast::PStatement.new(element.statement.build) }
6
- end
7
- end
8
-
9
- module NCStatementList
10
- def build
11
- stm = statement_list.build
12
- unless stm.class == Array
13
- stm = [stm]
14
- end
15
- [statement.build] + stm
16
- end
17
- end
18
-
19
- module NBinOp
20
- def build
21
- PLang::Ast::PBinOp.new(op.text_value, expr.build, statement.build)
22
- end
23
- end
24
-
25
- module NUnOp
26
- def build
27
- PLang::Ast::PUnOp.new(:not, statement.build)
28
- end
29
- end
30
-
31
- module NInteger
32
- def build
33
- PLang::Ast::PLiteral.new(:integer, text_value.to_i)
34
- end
35
- end
36
-
37
- module NDecimal
38
- def build
39
- PLang::Ast::PLiteral.new(:decimal, text_value.to_f)
40
- end
41
- end
42
-
43
- module NString
44
- def build
45
- PLang::Ast::PLiteral.new(:string, str.text_value)
46
- end
47
- end
48
-
49
- module NChar
50
- def build
51
- PLang::Ast::PLiteral.new(:char, c.text_value)
52
- end
53
- end
54
-
55
- module NId
56
- def build
57
- PLang::Ast::PId.new(text_value)
58
- end
59
- end
60
-
61
- module NObject
62
- def build
63
- if obj_list.respond_to?(:build)
64
- params = obj_list.build
65
- unless params.class == Array
66
- params = [params]
67
- end
68
- PLang::Ast::PObject.new(id.text_value, params)
69
- else
70
- PLang::Ast::PObject.new(id.text_value, [])
71
- end
72
- end
73
- end
74
-
75
- module NObjectList
76
- def build
77
- statement_list.build
78
- end
79
- end
80
-
81
- module NParemExpr
82
- def build
83
- statement.build
84
- end
85
- end
86
-
87
- module NCall
88
- def build
89
- params = []
90
- if cparams.respond_to?(:build)
91
- params = cparams.build
92
- unless params.class == Array
93
- params = [params]
94
- end
95
- end
96
- PLang::Ast::PCall.new(cid.build, params)
97
- end
98
- end
99
-
100
- module NVarLet
101
- def build
102
- PLang::Ast::PLet.new(var.build, statement.build)
103
- end
104
- end
105
-
106
- module NLambda
107
- def build
108
- @where = []
109
- if where.respond_to?(:build)
110
- @where = where.build
111
- end
112
- @params = []
113
- if params.respond_to?(:build)
114
- @params = params.build
115
- end
116
- PLang::Ast::PLambda.new(@params, statement.build, @where)
117
- end
118
- end
119
-
120
- module NCLambda
121
- def build
122
- nlambda = lamb.build
123
- nlambda.next_lambda = lambda.build.to_sexp
124
- nlambda
125
- end
126
- end
127
-
128
- module NWhere
129
- def build
130
- w = where_params.build
131
- if w.class == Array
132
- w
133
- else
134
- [w]
135
- end
136
- end
137
- end
138
-
139
- module NCWhereParams
140
- def build
141
- w = where_params.build
142
- unless w.class == Array
143
- w = [w]
144
- end
145
- [let.build] + w
146
- end
147
- end
148
-
149
- module NLambdaParams
150
- def build
151
- params = lambda_params_list.build
152
- if params.class == Array
153
- params
154
- else
155
- [params]
156
- end
157
- end
158
- end
159
-
160
- module NCLambdaParamsList
161
- def build
162
- params = lambda_params_list.build
163
- unless params.class == Array
164
- params = [params]
165
- end
166
- [form.build] + params
167
- end
168
- end
169
-
170
- module NObjectForm
171
- def build
172
- if obj_form_list.respond_to?(:build)
173
- PLang::Ast::PObject.new(id.text_value, obj_form_list.build)
174
- else
175
- PLang::Ast::PObject.new(id.text_value, [])
176
- end
177
- end
178
- end
179
-
180
- module NObjectGet
181
- def build
182
- PLang::Ast::PObjectCall.new(expr.build, id.build)
183
- end
184
- end
185
-
186
- module NObjectMsg
187
- def build
188
- params = []
189
- if statement_list.respond_to?(:build)
190
- params = statement_list.build
191
- unless params.class == Array
192
- params = [params]
193
- end
194
- end
195
- PLang::Ast::PCall.new(PLang::Ast::PObjectCall.new(expr.build, id.build), [expr.build] | params)
196
- end
197
- end
198
-
199
- module NObjectLet
200
- def build
201
- PLang::Ast::PObjectLet.new(object_form.build, var.build, statement.build)
202
- end
203
- end
204
-
205
- module NBoolean
206
- def build
207
- PLang::Ast::PLiteral.new(:boolean, text_value.to_sym)
208
- end
209
- end
210
-
211
- end
212
-
@@ -1,197 +0,0 @@
1
- grammar PLang
2
-
3
- rule statements
4
- (spaces? statement spaces?)* <NStatements>
5
- end
6
-
7
- rule statement
8
- unop / binop / let / object_op / expr
9
- end
10
-
11
- rule object_op
12
- object_msg /
13
- object_get
14
- end
15
-
16
- rule object_msg
17
- expr spaces? '->' spaces? id sspaces? '(' spaces? statement_list:statement_list? spaces? ')' <NObjectMsg>
18
- end
19
-
20
- rule object_get
21
- expr spaces? '->' spaces? id spaces? <NObjectGet>
22
- end
23
-
24
- rule let
25
- var_let /
26
- obj_let
27
- end
28
-
29
- rule var_let
30
- var spaces? '=' spaces? statement <NVarLet>
31
- end
32
-
33
- rule obj_let
34
- object_form spaces? '->' spaces? var spaces? '=' spaces? statement <NObjectLet>
35
- end
36
-
37
- rule var
38
- id / object
39
- end
40
-
41
- rule unop
42
- 'not' spaces? statement <NUnOp>
43
- end
44
-
45
- rule binop
46
- expr spaces? op spaces? statement <NBinOp>
47
- end
48
-
49
- rule op
50
- '+' / '-' / '*' / '/' / '%' / '>=' / '<=' / '>' / '<' / '==' / 'and' / 'or'
51
- end
52
-
53
- rule call
54
- cid:(id / lambda) sspaces? '(' spaces? cparams:statement_list? spaces? ')' <NCall>
55
- end
56
-
57
- rule sspaces
58
- [\s\t]*
59
- end
60
-
61
- rule expr
62
- number / boolean / call / id / object / char / string / lambda / parem_expr
63
- end
64
-
65
- rule parem_expr
66
- '(' spaces? statement spaces? ')' <NParemExpr>
67
- end
68
-
69
- rule statement_list
70
- cstatement_list / statement
71
- end
72
-
73
- rule cstatement_list
74
- statement spaces? ',' spaces? statement_list <NCStatementList>
75
- end
76
-
77
- rule lambda
78
- clamb / lamb
79
- end
80
-
81
- rule clamb
82
- lamb spaces? ',' spaces? lambda <NCLambda>
83
- end
84
-
85
- rule lamb
86
- '[' spaces? params:lambda_params? spaces? statement spaces? ']' spaces? where:where? <NLambda>
87
- end
88
-
89
- rule where
90
- ':' spaces? '(' spaces? where_params spaces? ')' <NWhere>
91
- end
92
-
93
- rule where_params
94
- cwhere_params / let
95
- end
96
-
97
- rule cwhere_params
98
- let spaces? ',' spaces? where_params <NCWhereParams>
99
- end
100
-
101
- rule lambda_params
102
- lambda_params_list spaces? '|' <NLambdaParams>
103
- end
104
-
105
- rule lambda_params_list
106
- clambda_params_list / form
107
- end
108
-
109
- rule clambda_params_list
110
- form spaces? ',' spaces? lambda_params_list <NCLambdaParamsList>
111
- end
112
-
113
- rule form
114
- number / id / object_form / char / string
115
- end
116
-
117
- rule object_form
118
- '{' spaces? id spaces? obj_form_list:object_form_list? spaces? '}' <NObjectForm>
119
- end
120
-
121
- rule object_form_list
122
- ':' spaces? lambda_params_list <NLambdaParams>
123
- end
124
-
125
- rule object
126
- '{' spaces? id spaces? obj_list:object_list? spaces? '}' <NObject>
127
- end
128
-
129
- rule object_list
130
- ':' spaces? statement_list <NObjectList>
131
- end
132
-
133
- rule boolean
134
- (true / false) <NBoolean>
135
- end
136
-
137
- rule true
138
- "true"
139
- end
140
-
141
- rule false
142
- "false"
143
- end
144
-
145
- rule id
146
- [a-zA-Z_0-9]+ <NId>
147
- end
148
-
149
- rule string
150
- "\"" str:(!"\"" .)* "\"" <NString>
151
- end
152
-
153
- rule char
154
- "'" c:(!"'" .) "'" <NChar>
155
- end
156
-
157
- rule number
158
- decimal / integer
159
- end
160
-
161
- rule decimal
162
- sign? spaces? digits? dot digits <NDecimal>
163
- end
164
-
165
- rule integer
166
- sign? spaces? digits <NInteger>
167
- end
168
-
169
- rule digits
170
- digit+
171
- end
172
-
173
- rule digit
174
- [0-9]
175
- end
176
-
177
- rule sign
178
- "-"
179
- end
180
-
181
- rule dot
182
- "."
183
- end
184
-
185
- rule spaces
186
- space* ("#" (!break .)* break+ space*)*
187
- end
188
-
189
- rule space
190
- [\r\n\t\s]
191
- end
192
-
193
- rule break
194
- [\r\n]
195
- end
196
-
197
- end
data/lib/vm/perror.rb DELETED
@@ -1,8 +0,0 @@
1
- module PLang
2
- class PError
3
- def PError.raise_error(error_name, error_message)
4
- puts error_name.to_s + ": " + error_message
5
- raise "PError.raise_error"
6
- end
7
- end
8
- end
data/lib/vm/proc.rb DELETED
@@ -1,67 +0,0 @@
1
- class Proc
2
- attr_accessor :form
3
-
4
- def compare_form(form, obj)
5
- if(form)
6
- unless obj[1] == form[1]
7
- return false
8
- else
9
- if form[0] == :literal
10
- unless form == obj
11
- return false
12
- end
13
- else
14
- if obj[0] == :literal
15
- unless form[2].length == 1
16
- return false
17
- else
18
- unless form[2][0][0] == :id
19
- return false
20
- end
21
- end
22
- else
23
- if form[2].length == obj[2].length
24
- form[2].each_with_index do |p, i|
25
- unless p[0] == :id
26
- unless p == obj[2][i]
27
- if p[0] == :object
28
- return compare_form(p, obj[2][i])
29
- else
30
- return false
31
- end
32
- end
33
- end
34
- end
35
- else
36
- return false
37
- end
38
- end
39
- end
40
- end
41
- end
42
- return true
43
- end
44
-
45
- def call?(params)
46
- if @form.length == params.length
47
- params.each_with_index do |param, i|
48
- unless param.class == Array
49
- unless compare_form(@form[i], param.form)
50
- return false
51
- end
52
- else
53
- if @form[i]
54
- return false
55
- end
56
- end
57
- end
58
- return true
59
- else
60
- return false
61
- end
62
- end
63
-
64
- def to_s
65
- "#lambda:#{self.object_id}"
66
- end
67
- end