dcunits_com Module Reference

Functions/Subroutines

subroutine, public dcunitssetline (line)
 
subroutine, public dcunitsgettoken (tokentype, ivalue, dvalue, cvalue)
 

Variables

integer, parameter, public s_eof = -128
 
integer, parameter, public s_shift = 300
 
integer, parameter, public s_text = 301
 
integer, parameter, public s_multiply = 302
 
integer, parameter, public s_divide = 303
 
integer, parameter, public s_exponent = 304
 
integer, parameter, public s_openpar = 305
 
integer, parameter, public s_closepar = 306
 
integer, parameter, public s_real = 307
 
integer, parameter, public s_integer = 308
 
character(string), save, private thisline = ""
 
integer, save, private i = 1
 

Function/Subroutine Documentation

◆ dcunitsgettoken()

subroutine, public dcunits_com::dcunitsgettoken ( integer, intent(out)  tokentype,
integer, dimension(5), intent(out)  ivalue,
real(dp), intent(out)  dvalue,
character(*), intent(out)  cvalue 
)

Definition at line 54 of file dcunits_com.f90.

References i, dc_regex::match(), s_closepar, s_divide, s_eof, s_exponent, s_integer, s_multiply, s_openpar, s_real, s_shift, s_text, and thisline.

Referenced by dc_units::dcunitsbuild().

54  use dc_regex, only: match
55  implicit none
56  integer, intent(out):: tokentype
57  integer, intent(out):: ivalue(5)
58  real(DP), intent(out):: dvalue
59  character(*), intent(out):: cvalue
60  integer:: iend, istr, ilen, ios
61  ivalue = 0
62  dvalue = 0.0_dp
63  cvalue = ""
64  iend = len_trim(thisline)
65  do
66  if (i > iend) exit
67  ! '#' 文字が現われれば EOF シンボルを返す
68  call match("^##", thisline(i:), istr, ilen)
69  if (istr > 0) then
70  i = iend + 1
71  tokentype = s_eof
72  return
73  endif
74  ! 空白を無視
75  call match("^#s+", thisline(i:), istr, ilen)
76  if (istr > 0) then
77  i = i + ilen
78  if (i > iend) exit
79  endif
80  ! シフト演算子チェック
81  call match("^@", thisline(i:), istr, ilen)
82  if (istr <= 0) call match("^from", thisline(i:), istr, ilen)
83  if (istr <= 0) call match("^at", thisline(i:), istr, ilen)
84  if (istr > 0) then
85  i = i + ilen
86  tokentype = s_shift
87  cvalue = thisline(i: i+ilen-1)
88  return
89  endif
90  ! 名前チェック
91  call match("^#a#w*#a", thisline(i:), istr, ilen)
92  if (istr <= 0) call match("^[#a'""]", thisline(i:), istr, ilen)
93  if (istr > 0) then
94  tokentype = s_text
95  cvalue = thisline(i: i+ilen-1)
96  i = i + ilen
97  return
98  endif
99  ! '*' の前に '**' を認知せねば。
100  call match("^#^", thisline(i:), istr, ilen)
101  if (istr <= 0) call match("^#*#*", thisline(i:), istr, ilen)
102  if (istr > 0) then
103  tokentype = s_exponent
104  cvalue = thisline(i: i+ilen-1)
105  i = i + ilen
106  return
107  endif
108  ! 実数にならない小数点は S_MULTIPLY
109  call match("^#.[^#d]", thisline(i:), istr, ilen)
110  if (istr <= 0) call match("^#*", thisline(i:), istr, ilen)
111  if (istr > 0) then
112  tokentype = s_multiply
113  cvalue = thisline(i: i+ilen-1)
114  i = i + 1
115  return
116  endif
117  ! 実数チェック. 小数点は語頭にあれば必ず数字が伴うので安心せよ
118  call match("^[-+]?#d*#.#d*[EeDd][-+]?#d+", thisline(i:), istr, ilen)
119  if (istr <= 0) call match("^[-+]?#d*#.#d*", thisline(i:), istr, ilen)
120  if (istr > 0) then
121  read(thisline(i: i+ilen-1), fmt=*, &
122  & iostat=ios) dvalue
123  if (ios /= 0) dvalue = huge(dvalue)
124  cvalue = thisline(i: i+ilen-1)
125  tokentype = s_real
126  i = i + ilen
127  return
128  endif
129  ! 整数チェック
130  call match("^[-+]?#d+", thisline(i:), istr, ilen)
131  if (istr > 0) then
132  read(thisline(i: i+ilen-1), fmt=*, &
133  & iostat=ios) ivalue(1)
134  if (ios /= 0) ivalue(1) = huge(1)
135  cvalue = thisline(i: i+ilen-1)
136  tokentype = s_integer
137  i = i + ilen
138  return
139  endif
140  ! ほかの1字トークンチェック
141  if (thisline(i:i) == '/') then
142  tokentype = s_divide
143  cvalue = thisline(i:i)
144  i = i + 1
145  return
146  endif
147  if (thisline(i:i) == '(') then
148  tokentype = s_openpar
149  cvalue = thisline(i:i)
150  i = i + 1
151  return
152  endif
153  if (thisline(i:i) == ')') then
154  tokentype = s_closepar
155  cvalue = thisline(i:i)
156  i = i + 1
157  return
158  endif
159  ! だめだこりゃ。はい次いってみよう
160  tokentype = ichar(thisline(i:i))
161  cvalue = thisline(i:i)
162  i = i + 1
163  return
164  enddo
165  i = iend + 1
166  tokentype = s_eof
167  cvalue = ""
character(string), save, private thisline
Definition: dcunits_com.f90:41
integer, parameter, public s_exponent
Definition: dcunits_com.f90:34
integer, parameter, public s_eof
Definition: dcunits_com.f90:29
integer, parameter, public s_openpar
Definition: dcunits_com.f90:35
integer, parameter, public s_shift
Definition: dcunits_com.f90:30
integer, parameter, public s_real
Definition: dcunits_com.f90:37
シンプルな正規表現関数 &#39;match&#39; を提供します.
Definition: dc_regex.f90:16
subroutine, public match(pattern, text, start, length)
Definition: dc_regex.f90:267
integer, parameter, public s_divide
Definition: dcunits_com.f90:33
integer, parameter, public s_multiply
Definition: dcunits_com.f90:32
integer, parameter, public s_closepar
Definition: dcunits_com.f90:36
integer, parameter, public s_text
Definition: dcunits_com.f90:31
integer, save, private i
Definition: dcunits_com.f90:42
integer, parameter, public s_integer
Definition: dcunits_com.f90:38
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dcunitssetline()

subroutine, public dcunits_com::dcunitssetline ( character(*), intent(in)  line)

Definition at line 47 of file dcunits_com.f90.

References i, and thisline.

Referenced by dc_units::dcunitsbuild().

47  implicit none
48  character(*), intent(in):: line
49  thisline = line
50  i = 1
character(string), save, private thisline
Definition: dcunits_com.f90:41
integer, save, private i
Definition: dcunits_com.f90:42
Here is the caller graph for this function:

Variable Documentation

◆ i

integer, save, private dcunits_com::i = 1
private

Definition at line 42 of file dcunits_com.f90.

Referenced by dcunitsgettoken(), and dcunitssetline().

42  integer, private, save:: i = 1
integer, save, private i
Definition: dcunits_com.f90:42

◆ s_closepar

integer, parameter, public dcunits_com::s_closepar = 306

Definition at line 36 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

36  integer, parameter:: s_closepar = 306
integer, parameter, public s_closepar
Definition: dcunits_com.f90:36

◆ s_divide

integer, parameter, public dcunits_com::s_divide = 303

Definition at line 33 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

33  integer, parameter:: s_divide = 303
integer, parameter, public s_divide
Definition: dcunits_com.f90:33

◆ s_eof

integer, parameter, public dcunits_com::s_eof = -128

Definition at line 29 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

29  integer, parameter:: s_eof = -128
integer, parameter, public s_eof
Definition: dcunits_com.f90:29

◆ s_exponent

integer, parameter, public dcunits_com::s_exponent = 304

Definition at line 34 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

34  integer, parameter:: s_exponent = 304
integer, parameter, public s_exponent
Definition: dcunits_com.f90:34

◆ s_integer

integer, parameter, public dcunits_com::s_integer = 308

Definition at line 38 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

38  integer, parameter:: s_integer = 308
integer, parameter, public s_integer
Definition: dcunits_com.f90:38

◆ s_multiply

integer, parameter, public dcunits_com::s_multiply = 302

Definition at line 32 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

32  integer, parameter:: s_multiply = 302
integer, parameter, public s_multiply
Definition: dcunits_com.f90:32

◆ s_openpar

integer, parameter, public dcunits_com::s_openpar = 305

Definition at line 35 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

35  integer, parameter:: s_openpar = 305
integer, parameter, public s_openpar
Definition: dcunits_com.f90:35

◆ s_real

integer, parameter, public dcunits_com::s_real = 307

Definition at line 37 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

37  integer, parameter:: s_real = 307
integer, parameter, public s_real
Definition: dcunits_com.f90:37

◆ s_shift

integer, parameter, public dcunits_com::s_shift = 300

Definition at line 30 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

30  integer, parameter:: s_shift = 300
integer, parameter, public s_shift
Definition: dcunits_com.f90:30

◆ s_text

integer, parameter, public dcunits_com::s_text = 301

Definition at line 31 of file dcunits_com.f90.

Referenced by dc_units::dcunitsbuild(), and dcunitsgettoken().

31  integer, parameter:: s_text = 301
integer, parameter, public s_text
Definition: dcunits_com.f90:31

◆ thisline

character(string), save, private dcunits_com::thisline = ""
private

Definition at line 41 of file dcunits_com.f90.

Referenced by dcunitsgettoken(), and dcunitssetline().

41  character(STRING), private, save:: thisline = ""
character(string), save, private thisline
Definition: dcunits_com.f90:41