79 lines
1.1 KiB
Text
79 lines
1.1 KiB
Text
DEFINE PTR="CARD"
|
|
|
|
TYPE Tokens=[
|
|
PTR buf ;BYTE ARRAY
|
|
PTR arr ;CARD ARRAY
|
|
PTR endPtr
|
|
BYTE count]
|
|
|
|
PROC Init(Tokens POINTER t BYTE ARRAY b PTR ARRAY a)
|
|
t.buf=b
|
|
t.arr=a
|
|
t.endPtr=b
|
|
t.count=0
|
|
RETURN
|
|
|
|
PROC AddToken(Tokens POINTER t CHAR ARRAY s)
|
|
PTR ARRAY a
|
|
CHAR ARRAY tmp
|
|
|
|
a=t.arr
|
|
tmp=t.endPtr
|
|
SCopy(tmp,s)
|
|
a(t.count)=tmp
|
|
t.count==+1
|
|
t.endPtr=t.endPtr+s(0)+1
|
|
RETURN
|
|
|
|
PROC PrintTokens(Tokens POINTER t)
|
|
BYTE i
|
|
PTR ARRAY a
|
|
|
|
a=t.arr
|
|
FOR i=0 TO t.count-1
|
|
DO
|
|
PrintF("""%S""%E",a(i))
|
|
OD
|
|
RETURN
|
|
|
|
PROC Append(CHAR ARRAY s CHAR c)
|
|
s(0)==+1
|
|
s(s(0))=c
|
|
RETURN
|
|
|
|
PROC Tokenize(CHAR ARRAY s CHAR sep,esc Tokens POINTER res)
|
|
BYTE ARRAY b(200)
|
|
PTR ARRAY a(20)
|
|
CHAR ARRAY tmp(255)
|
|
BYTE i,isEsc
|
|
CHAR c
|
|
|
|
Init(res,b,a)
|
|
isEsc=0
|
|
tmp(0)=0
|
|
FOR i=1 TO s(0)
|
|
DO
|
|
c=s(i)
|
|
IF isEsc THEN
|
|
isEsc=0
|
|
Append(tmp,c)
|
|
ELSE
|
|
IF c=esc THEN
|
|
isEsc=1
|
|
ELSEIF c=sep THEN
|
|
AddToken(res,tmp)
|
|
tmp(0)=0
|
|
ELSE
|
|
Append(tmp,c)
|
|
FI
|
|
FI
|
|
OD
|
|
AddToken(res,tmp)
|
|
RETURN
|
|
|
|
PROC Main()
|
|
Tokens t
|
|
|
|
Tokenize("one^|uno||three^^^^|four^^^|^cuatro|",'|,'^,t)
|
|
PrintTokens(t)
|
|
RETURN
|