jaina 0.1.0 → 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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +9 -0
- data/README.md +1 -0
- data/jaina.gemspec +2 -1
- data/lib/jaina/parser/ast/context.rb +1 -1
- data/lib/jaina/parser/ast/evaluator.rb +5 -1
- data/lib/jaina/parser/ast/tree.rb +6 -0
- data/lib/jaina/parser/ast.rb +6 -9
- data/lib/jaina/parser/code_converter.rb +1 -1
- data/lib/jaina/parser/expression/operator/and.rb +25 -0
- data/lib/jaina/parser/expression/operator/not.rb +17 -0
- data/lib/jaina/parser/expression/operator/or.rb +25 -0
- data/lib/jaina/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 021a99a70e1f530c83857667a7c0defdd785abc635931167fe2a9bd45bf1393f
|
4
|
+
data.tar.gz: fe1956e513688b643365ed85a55a02226a18b5adc75ee202130f7b1dab8404ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d147dbfe65aef16511b703b52100b00f28b81695c1e18906b166180c49629cd6b8cc07ccf362022a04fc7897f0e9625e3a10969d52ad2a7f3606755941c8a6e
|
7
|
+
data.tar.gz: 39ca3e5fadb5341a29f363f4ec3426395edb214c4041620ccea19282d49602edeef417b641659dc38d17e01a81b9baf696258e8f86b3455f20f4cf9979791610
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Jaina · [](https://badge.fury.io/rb/jaina) [](https://travis-ci.org/0exp/jaina) [](https://coveralls.io/github/0exp/jaina?branch=master)
|
2
2
|
|
3
3
|
Simple programming language builder inspired by interpreter pattern.
|
4
|
+
You can build your own languages with custom operands and operators for any project purposes.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
data/jaina.gemspec
CHANGED
@@ -14,7 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = 'https://github.com/0exp/jaina'
|
15
15
|
spec.summary = 'Simple programming language builder inspired by interpreter pattern.'
|
16
16
|
spec.description = 'Simple programming language builder inspired by interpreter pattern. ' \
|
17
|
-
'You can build your own
|
17
|
+
'You can build your own languages with custom operands and operators ' \
|
18
|
+
'for any project purposes.'
|
18
19
|
|
19
20
|
spec.bindir = 'bin'
|
20
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
@@ -10,8 +10,12 @@ module Jaina::Parser::AST::Evaluator
|
|
10
10
|
# @api private
|
11
11
|
# @since 0.1.0
|
12
12
|
def evaluate(ast)
|
13
|
+
# NOTE: build shared context for a program
|
13
14
|
context = Jaina::Parser::AST::Context.new
|
14
|
-
|
15
|
+
|
16
|
+
# NOTE: evaluate the root expression of AST
|
17
|
+
# NOTE: root is an atity of type [Jaina::Parser::Expression::Operator::Abstract]
|
18
|
+
ast.root.evaluate(context)
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
@@ -32,4 +32,10 @@ class Jaina::Parser::AST::Tree
|
|
32
32
|
@ast_oriented_program = ast_oriented_program
|
33
33
|
@expression = expression
|
34
34
|
end
|
35
|
+
|
36
|
+
# @return [Jaina::Parser::Expression::operator::Abstract]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
# @since 0.1.0
|
40
|
+
alias_method :root, :expression
|
35
41
|
end
|
data/lib/jaina/parser/ast.rb
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
# @api private
|
4
4
|
# @since 0.1.0
|
5
5
|
class Jaina::Parser::AST
|
6
|
+
# @since 0.2.0
|
7
|
+
extend Forwardable
|
8
|
+
|
6
9
|
require_relative './ast/tree'
|
7
10
|
require_relative './ast/tree_builder'
|
8
11
|
require_relative './ast/evaluator'
|
@@ -18,15 +21,6 @@ class Jaina::Parser::AST
|
|
18
21
|
ast_tree = Jaina::Parser::AST::TreeBuilder.build(program)
|
19
22
|
new(program, ast_tree)
|
20
23
|
end
|
21
|
-
|
22
|
-
# @param program [String] Program string in prefix form
|
23
|
-
# @return [Any]
|
24
|
-
#
|
25
|
-
# @api private
|
26
|
-
# @since 0.1.0
|
27
|
-
def evaluate(program)
|
28
|
-
build(program).evaluate
|
29
|
-
end
|
30
24
|
end
|
31
25
|
|
32
26
|
# @return [Jaina::Pasrer::AST::Tree]
|
@@ -41,6 +35,9 @@ class Jaina::Parser::AST
|
|
41
35
|
# @since 0.1.0
|
42
36
|
attr_reader :program
|
43
37
|
|
38
|
+
# @since 0.2.0
|
39
|
+
def_delegator :ast_tree, :root
|
40
|
+
|
44
41
|
# @param program [String]
|
45
42
|
# @param ast_tree [Jaina::Parser::AST::Tree]
|
46
43
|
# @return [void]
|
@@ -8,5 +8,30 @@ module Jaina::Parser::Expression::Operator
|
|
8
8
|
associativity_direction :left
|
9
9
|
token 'AND'
|
10
10
|
acts_as_binary_term
|
11
|
+
|
12
|
+
# @param context [Jaina::Parser::AST::Context]
|
13
|
+
# @return [Any]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.2.0
|
17
|
+
def evaluate(context)
|
18
|
+
left_expression.evaluate(context) && right_expression.evaluate(context)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Jaina::Parser::Expression::Operator::Abstract]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
# @since 0.2.0
|
25
|
+
def left_expression
|
26
|
+
expressions[0]
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Jaina::Parser::Expression::Operator::Abstract]
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
# @since 0.2.0
|
33
|
+
def right_expression
|
34
|
+
expressions[1]
|
35
|
+
end
|
11
36
|
end
|
12
37
|
end
|
@@ -8,5 +8,22 @@ module Jaina::Parser::Expression::Operator
|
|
8
8
|
associativity_direction :right
|
9
9
|
token 'NOT'
|
10
10
|
acts_as_unary_term
|
11
|
+
|
12
|
+
# @param context [Jaina::Parser::AST::Context]
|
13
|
+
# @return [Any]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.2.0
|
17
|
+
def evaluate(contenxt)
|
18
|
+
!expression.evaluate(context)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Jaina::Parser::Expression::Operator::Abstract]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
# @since 0.2.0
|
25
|
+
def expression
|
26
|
+
expressions.first
|
27
|
+
end
|
11
28
|
end
|
12
29
|
end
|
@@ -8,5 +8,30 @@ module Jaina::Parser::Expression::Operator
|
|
8
8
|
associativity_direction :left
|
9
9
|
token 'OR'
|
10
10
|
acts_as_binary_term
|
11
|
+
|
12
|
+
# @param context [Jaina::Parser::AST::Context]
|
13
|
+
# @return [Any]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.2.0
|
17
|
+
def evaluate(context)
|
18
|
+
left_expression.evaluate(context) || right_expression.evaluate(context)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Jaina::Parser::Expression::Operator::Abstract]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
# @since 0.2.0
|
25
|
+
def left_expression
|
26
|
+
expressions.first
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Jaina::Parser::Expression::Operator::Abstract]
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
# @since 0.2.0
|
33
|
+
def right_expression
|
34
|
+
expressions.second
|
35
|
+
end
|
11
36
|
end
|
12
37
|
end
|
data/lib/jaina/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jaina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rustam Ibragimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -109,7 +109,8 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: Simple programming language builder inspired by interpreter pattern.
|
112
|
-
You can build your own
|
112
|
+
You can build your own languages with custom operands and operators for any project
|
113
|
+
purposes.
|
113
114
|
email:
|
114
115
|
- iamdaiver@icloud.com
|
115
116
|
executables: []
|
@@ -120,6 +121,7 @@ files:
|
|
120
121
|
- ".rspec"
|
121
122
|
- ".rubocop.yml"
|
122
123
|
- ".travis.yml"
|
124
|
+
- CHANGELOG.md
|
123
125
|
- Gemfile
|
124
126
|
- README.md
|
125
127
|
- Rakefile
|