p-lang 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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