1 # coding: utf-8
2 # frozen_string_literal: true
3
4
5
6 module Umu
7
8 module Lexical
9
10 module Token
11
12 module Separator
13
14 class Newline < Abstraction::Abstract
15 alias opt_val val
16
17
18 def initialize(loc, opt_val)
19 ASSERT.opt_kind_of opt_val, ::String
20
21 super
22 end
23
24
25 def to_s
26 if self.opt_val
27 format "NL(%s)", self.val.inspect
28 else
29 "NL"
30 end
31 end
32
33
34 def separator?
35 true
36 end
37 end
38
39
40
41 class Comment < Abstraction::String
42 def to_s
43 format "COMMENT(%s)", self.val.inspect
44 end
45
46
47 def separator?
48 true
49 end
50 end
51
52
53
54 class Space < Abstraction::String
55 def to_s
56 if self.val == " "
57 'SP'
58 else
59 format "SP(%s)", self.val.inspect
60 end
61 end
62
63
64 def separator?
65 true
66 end
67 end
68
69 end # Umu::Lexical::Token::Separator
70
71
72
73 module_function
74
75 def make_newline(loc, opt_val)
76 ASSERT.kind_of loc, LOC::Entry
77 ASSERT.opt_kind_of opt_val, ::String
78
79 Separator::Newline.new(loc, opt_val.freeze).freeze
80 end
81
82
83 def make_comment(loc, val)
84 ASSERT.kind_of loc, LOC::Entry
85 ASSERT.kind_of val, ::String
86
87 Separator::Comment.new(loc, val.freeze).freeze
88 end
89
90
91 def make_space(loc, val)
92 ASSERT.kind_of loc, LOC::Entry
93 ASSERT.kind_of val, ::String
94
95 Separator::Space.new(loc, val.freeze).freeze
96 end
97
98 end # Umu::Lexical::Token
99
100 end # Umu::Lexical
101
102 end # Umu