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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cdf872d493fc81d79bca68b298c725f4a4ea0976
4
- data.tar.gz: '0196ca2dcc427290d7834ebc083e99f944339b8c'
3
+ metadata.gz: f8869b3aab60a17435e4ab18be3de45ec61d79ab
4
+ data.tar.gz: 0d6d5888624fa4fa89f4edd99120d704dcb1d121
5
5
  SHA512:
6
- metadata.gz: e4a71d36f48baa147d86a7bacd6eca2b422ec4ad985c0c12b41c0003691accb9e95fbfa711d1be3717a8701f381e681fa0698cf071efc7b31f1062a69c2d5266
7
- data.tar.gz: e31700583f19cc9b9e494cdd08f636490e38eb988a3003de2e320ca76caeafc25f12ee838f005cc24a8b7e50cbede92884267f05885cfba09f6fef01f507bd8c
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
- require "../lib/lisp/interpreter/run"
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?
@@ -55,7 +55,8 @@ module TokenizerHelper
55
55
 
56
56
  def init_reserved_fn
57
57
  {
58
- 'null' => '\'()'
58
+ 'null' => '\'()',
59
+ 'ghci' => ''
59
60
  }
60
61
  end
61
62
 
@@ -1,5 +1,5 @@
1
1
  module Lisp
2
2
  module Interpreter
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
5
5
  end
@@ -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
@@ -0,0 +1 @@
1
+ (+ 1 2)
data/spec/lisp/test.ss ADDED
@@ -0,0 +1,2 @@
1
+ (lambda (x) (
2
+ * 2 x))
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.2.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-03 00:00:00.000000000 Z
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/console.bat
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.6.12
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
@@ -1,2 +0,0 @@
1
- @echo off
2
- start cmd /C "title lisp-interpreter & ruby start.rb"