lisp-interpreter 0.2.0 → 0.3.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/bin/converter.bat +58 -0
- data/bin/start.rb +2 -2
- data/bin/zakichan.bat +1 -0
- data/lib/lisp/interpreter/parser.rb +47 -0
- data/lib/lisp/interpreter/tokenizer.rb +2 -1
- data/lib/lisp/interpreter/version.rb +1 -1
- data/spec/lisp/interpreter_spec.rb +18 -0
- data/spec/lisp/test.scm +1 -0
- data/spec/lisp/test.ss +2 -0
- metadata +7 -4
- data/bin/console.bat +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8869b3aab60a17435e4ab18be3de45ec61d79ab
|
4
|
+
data.tar.gz: 0d6d5888624fa4fa89f4edd99120d704dcb1d121
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 811780ecd1e8bb843955215b03c20e90a4af7d6e20d2bae1959e86d776a99d4f1a2b934c078dd37e5c3e5f3e0bea5d7bc0101968bab54707bb1743c9bc58e5b2
|
7
|
+
data.tar.gz: b30879eabe610feccf252fc20c748a9f310b4ee39f68568002b01fdc33030887617d9747786e64fde1d8ecbb7b1fa4f5ceb83f3082450f9e37c61d6a9d77c7d8
|
data/bin/converter.bat
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
;@echo off
|
2
|
+
; rem https://github.com/npocmaka/batch.scripts/edit/master/hybrids/iexpress/bat2exeIEXP.bat
|
3
|
+
;if "%~2" equ "" (
|
4
|
+
; echo usage: %~nx0 batFile.bat target.Exe
|
5
|
+
;)
|
6
|
+
;set "target.exe=%__cd__%%~2"
|
7
|
+
;set "batch_file=%~f1"
|
8
|
+
;set "bat_name=%~nx1"
|
9
|
+
;set "bat_dir=%~dp1"
|
10
|
+
|
11
|
+
;copy /y "%~f0" "%temp%\2exe.sed" >nul
|
12
|
+
|
13
|
+
;(echo()>>"%temp%\2exe.sed"
|
14
|
+
;(echo(AppLaunched=cmd.exe /c "%bat_name%")>>"%temp%\2exe.sed"
|
15
|
+
;(echo(TargetName=%target.exe%)>>"%temp%\2exe.sed"
|
16
|
+
;(echo(FILE0="%bat_name%")>>"%temp%\2exe.sed"
|
17
|
+
;(echo([SourceFiles])>>"%temp%\2exe.sed"
|
18
|
+
;(echo(SourceFiles0=%bat_dir%)>>"%temp%\2exe.sed"
|
19
|
+
;(echo([SourceFiles0])>>"%temp%\2exe.sed"
|
20
|
+
;(echo(%%FILE0%%=)>>"%temp%\2exe.sed"
|
21
|
+
|
22
|
+
|
23
|
+
;iexpress /n /q /m %temp%\2exe.sed
|
24
|
+
|
25
|
+
;del /q /f "%temp%\2exe.sed"
|
26
|
+
;exit /b 0
|
27
|
+
|
28
|
+
[Version]
|
29
|
+
Class=IEXPRESS
|
30
|
+
SEDVersion=3
|
31
|
+
[Options]
|
32
|
+
PackagePurpose=InstallApp
|
33
|
+
ShowInstallProgramWindow=0
|
34
|
+
HideExtractAnimation=1
|
35
|
+
UseLongFileName=1
|
36
|
+
InsideCompressed=0
|
37
|
+
CAB_FixedSize=0
|
38
|
+
CAB_ResvCodeSigning=0
|
39
|
+
RebootMode=N
|
40
|
+
InstallPrompt=%InstallPrompt%
|
41
|
+
DisplayLicense=%DisplayLicense%
|
42
|
+
FinishMessage=%FinishMessage%
|
43
|
+
TargetName=%TargetName%
|
44
|
+
FriendlyName=%FriendlyName%
|
45
|
+
AppLaunched=%AppLaunched%
|
46
|
+
PostInstallCmd=%PostInstallCmd%
|
47
|
+
AdminQuietInstCmd=%AdminQuietInstCmd%
|
48
|
+
UserQuietInstCmd=%UserQuietInstCmd%
|
49
|
+
SourceFiles=SourceFiles
|
50
|
+
|
51
|
+
[Strings]
|
52
|
+
InstallPrompt=
|
53
|
+
DisplayLicense=
|
54
|
+
FinishMessage=
|
55
|
+
FriendlyName=-
|
56
|
+
PostInstallCmd=<None>
|
57
|
+
AdminQuietInstCmd=
|
58
|
+
UserQuietInstCmd=
|
data/bin/start.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
ruby run.rb
|
1
|
+
require_relative '../lib/lisp/interpreter/run'
|
2
|
+
ruby run.rb
|
data/bin/zakichan.bat
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
start cmd /C "title lisp-interpreter & ruby start.rb"
|
@@ -44,7 +44,54 @@ class Parser
|
|
44
44
|
result
|
45
45
|
end
|
46
46
|
|
47
|
+
def read_file_helper(token)
|
48
|
+
pattern = /^ghci .*\.[.ss|.scm]+$/
|
49
|
+
result = (token =~ pattern)
|
50
|
+
if result.nil?
|
51
|
+
token = token[5..-1].nil? ? token[4..-1] : token[5..-1]
|
52
|
+
msg = 'File with name "' + token + '" is not valid scheme file'
|
53
|
+
return msg
|
54
|
+
return false
|
55
|
+
end
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
59
|
+
def read_file_reader(f, value, expr)
|
60
|
+
while (c = f.read(1))
|
61
|
+
expr << c
|
62
|
+
if (validate_token expr).nil? && expr != ''
|
63
|
+
last_value = parse expr
|
64
|
+
expr = ''
|
65
|
+
end
|
66
|
+
end
|
67
|
+
last_value
|
68
|
+
end
|
69
|
+
|
70
|
+
def read_file_executor(file)
|
71
|
+
f = File.open(file)
|
72
|
+
expr = ''
|
73
|
+
last_value = ''
|
74
|
+
read_file_reader f, last_value, expr
|
75
|
+
end
|
76
|
+
|
77
|
+
def read_file(token)
|
78
|
+
res = read_file_helper token
|
79
|
+
return res if res.is_a? String
|
80
|
+
filename = token[5..-1]
|
81
|
+
if !File.exist? filename
|
82
|
+
'File with name "' + filename + '" does not exist!'
|
83
|
+
else
|
84
|
+
read_file_executor filename
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def fetch_file_read(token)
|
89
|
+
res = read_file token
|
90
|
+
print_result res unless res.to_s.empty?
|
91
|
+
end
|
92
|
+
|
47
93
|
def parse(token)
|
94
|
+
return fetch_file_read token if token.start_with? 'ghci'
|
48
95
|
token_error = validate_token token
|
49
96
|
result =
|
50
97
|
if token_error.nil?
|
@@ -984,4 +984,22 @@ RSpec.describe Lisp::Interpreter do
|
|
984
984
|
expect(@p.parse('yy')).to eq @msg['inv_type']
|
985
985
|
end
|
986
986
|
end
|
987
|
+
|
988
|
+
# You must provide fullpath of the file or place it in the directory where you run the script
|
989
|
+
describe 'file read' do
|
990
|
+
it 'reads from .ss file' do
|
991
|
+
expect(@p.parse('ghci D:\Github\b\Ruby-Project\lisp-interpreter\spec\lisp\test.ss')).to be_instance_of(Proc)
|
992
|
+
end
|
993
|
+
|
994
|
+
it 'reads from .scm file' do
|
995
|
+
expect(@p.parse('ghci D:\Github\b\Ruby-Project\lisp-interpreter\spec\lisp\test.scm')).to eq 3
|
996
|
+
end
|
997
|
+
|
998
|
+
it 'returns error if the file is missing or not valid scheme file' do
|
999
|
+
msg1 = 'File with name "test.ff" is not valid scheme file'
|
1000
|
+
msg2 = 'File with name "test1.ss" does not exist!'
|
1001
|
+
expect(@p.parse('ghci test.ff')).to eq msg1
|
1002
|
+
expect(@p.parse('ghci test1.ss')).to eq msg2
|
1003
|
+
end
|
1004
|
+
end
|
987
1005
|
end
|
data/spec/lisp/test.scm
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
(+ 1 2)
|
data/spec/lisp/test.ss
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lisp-interpreter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zaki Petrov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,9 +67,10 @@ files:
|
|
67
67
|
- LICENSE.txt
|
68
68
|
- README.md
|
69
69
|
- Rakefile
|
70
|
-
- bin/
|
70
|
+
- bin/converter.bat
|
71
71
|
- bin/setup
|
72
72
|
- bin/start.rb
|
73
|
+
- bin/zakichan.bat
|
73
74
|
- lib/lisp/interpreter.rb
|
74
75
|
- lib/lisp/interpreter/boolean.rb
|
75
76
|
- lib/lisp/interpreter/checker.rb
|
@@ -87,6 +88,8 @@ files:
|
|
87
88
|
- lib/lisp/interpreter/version.rb
|
88
89
|
- lisp-interpreter.gemspec
|
89
90
|
- spec/lisp/interpreter_spec.rb
|
91
|
+
- spec/lisp/test.scm
|
92
|
+
- spec/lisp/test.ss
|
90
93
|
- spec/spec_helper.rb
|
91
94
|
homepage: ''
|
92
95
|
licenses:
|
@@ -109,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
112
|
version: '0'
|
110
113
|
requirements: []
|
111
114
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.5.2
|
113
116
|
signing_key:
|
114
117
|
specification_version: 4
|
115
118
|
summary: Lisp interpreter gem
|
data/bin/console.bat
DELETED