taoism 1.0.1
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 +7 -0
- data/bin/tao +2 -0
- data/lib/tao/lexer/scanner/position.rb +7 -0
- data/lib/tao/lexer/scanner/position_tracking.rb +19 -0
- data/lib/tao/lexer/scanner.rb +50 -0
- data/lib/tao/lexer/tokenizer.rb +17 -0
- data/lib/tao/lexer.rb +6 -0
- data/lib/tao/token/types.rb +34 -0
- data/lib/tao/token.rb +8 -0
- data/lib/tao/version.rb +3 -0
- data/lib/taoism.rb +3 -0
- metadata +53 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 6257a4a47d084d1a3bdaab39c08ab216ddd729fad2f508da85a79775043539bf
|
|
4
|
+
data.tar.gz: 4d156fb2970893a73fe4898c316dc33d96785e9cb48ee7ddf1dfa343521afff0
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8f4fc03e11db86e3c85fab8fae14509036d1579bd166b97cfa582dc2673fcb8fb0941d75da3278884b9dc431188a1877f3b385ebac91fe711ed820357b13f323
|
|
7
|
+
data.tar.gz: 9f3d220093d56d8423c9e8f34263b4ee949931cdcd6c7253c857d8c4568e3605e9e052d1a6181e57a215f6b251aa26f3e12b38f86e08cf66e494904bb691e283
|
data/bin/tao
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Tao
|
|
2
|
+
module Lexer
|
|
3
|
+
class Scanner
|
|
4
|
+
module PositionTracking
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.class_eval { attr_reader :pos }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def init_pos
|
|
10
|
+
@pos = Position.new(0, 1, 1)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def beginning_of_line?
|
|
14
|
+
@pos.col == 1
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Tao
|
|
2
|
+
module Lexer
|
|
3
|
+
class Scanner
|
|
4
|
+
include PositionTracking
|
|
5
|
+
|
|
6
|
+
def initialize(source)
|
|
7
|
+
@source = source
|
|
8
|
+
@current = 0
|
|
9
|
+
init_pos
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def alpha_numeric?(ch)
|
|
13
|
+
alpha_char?(ch) || digit_char?(ch)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def alpha_char?(ch)
|
|
17
|
+
('A' <= ch && ch <= 'Z') ||
|
|
18
|
+
('a' <= ch && ch <= 'z') ||
|
|
19
|
+
('_' == ch)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def digit_char?(ch)
|
|
23
|
+
'0' <= ch && ch <= '9'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def peek
|
|
27
|
+
return "\0" if at_end?
|
|
28
|
+
@source[@current]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def peek_next
|
|
32
|
+
if @current.next < @source.length
|
|
33
|
+
@source[@current.next]
|
|
34
|
+
else
|
|
35
|
+
"\0"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def advance(step = 1)
|
|
40
|
+
char = @source[@current]
|
|
41
|
+
@current += step
|
|
42
|
+
char
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def at_end?
|
|
46
|
+
@source[@current].nil?
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
data/lib/tao/lexer.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Tao
|
|
2
|
+
class Token
|
|
3
|
+
module Types
|
|
4
|
+
def self.included(base)
|
|
5
|
+
token_type :Plus, :Minus, :Star, :Slash, :Modulo,
|
|
6
|
+
:Greater, :GreaterEq, :Less, :LessEq,
|
|
7
|
+
:Equal, :EqualEq, :Bang, :BangEq,
|
|
8
|
+
:And, :Or, :Not, :Pipe
|
|
9
|
+
|
|
10
|
+
token_type :Comma, :Colon, :Semi, :Dot,
|
|
11
|
+
:LSquare, :RSquare,
|
|
12
|
+
:LBrace, :RBrace,
|
|
13
|
+
:LParen, :RParen
|
|
14
|
+
|
|
15
|
+
token_type :Identifier, :String, :Int,
|
|
16
|
+
:Float, :Bool, :None,
|
|
17
|
+
:EOF, :Illegal
|
|
18
|
+
|
|
19
|
+
token_type :If, :Then, :Else, :Loop,
|
|
20
|
+
:Is,
|
|
21
|
+
:Next, :Leave,
|
|
22
|
+
:Match, :Return,
|
|
23
|
+
:Fun, :Self,
|
|
24
|
+
:Let, :Mut,
|
|
25
|
+
:Use, :At,
|
|
26
|
+
:Data
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.token_type(*types)
|
|
30
|
+
types.each { const_set _1, _1 }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/tao/token.rb
ADDED
data/lib/tao/version.rb
ADDED
data/lib/taoism.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: taoism
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- oneureka
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2025-12-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description:
|
|
14
|
+
email:
|
|
15
|
+
executables:
|
|
16
|
+
- tao
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- bin/tao
|
|
21
|
+
- lib/tao/lexer.rb
|
|
22
|
+
- lib/tao/lexer/scanner.rb
|
|
23
|
+
- lib/tao/lexer/scanner/position.rb
|
|
24
|
+
- lib/tao/lexer/scanner/position_tracking.rb
|
|
25
|
+
- lib/tao/lexer/tokenizer.rb
|
|
26
|
+
- lib/tao/token.rb
|
|
27
|
+
- lib/tao/token/types.rb
|
|
28
|
+
- lib/tao/version.rb
|
|
29
|
+
- lib/taoism.rb
|
|
30
|
+
homepage:
|
|
31
|
+
licenses:
|
|
32
|
+
- MIT
|
|
33
|
+
metadata: {}
|
|
34
|
+
post_install_message:
|
|
35
|
+
rdoc_options: []
|
|
36
|
+
require_paths:
|
|
37
|
+
- lib
|
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
39
|
+
requirements:
|
|
40
|
+
- - ">="
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '0'
|
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
requirements: []
|
|
49
|
+
rubygems_version: 3.5.22
|
|
50
|
+
signing_key:
|
|
51
|
+
specification_version: 4
|
|
52
|
+
summary: The Tao programming language
|
|
53
|
+
test_files: []
|