Tokenize a string: Difference between revisions
Content added Content deleted
(added MMIX) |
|||
Line 440: | Line 440: | ||
) |
) |
||
format "%\n" output</lang> |
format "%\n" output</lang> |
||
=={{header|MMIX}}== |
|||
<lang mmix>sep IS ',' |
|||
EOS IS 0 |
|||
NL IS 10 |
|||
// main registers |
|||
p IS $255 |
|||
tp GREG |
|||
c GREG |
|||
t GREG |
|||
LOC Data_Segment |
|||
GREG @ |
|||
Text BYTE "Hello,How,Are,You,Today",EOS |
|||
token BYTE 0 |
|||
eot IS @+255 |
|||
LOC #100 % main () { |
|||
Main LDA p,Text % |
|||
LDA tp,token % initialize pointers |
|||
2H LDBU c,p % DO get char |
|||
BZ c,5F % break if char == EOS |
|||
CMP t,c,sep % if char != sep then |
|||
PBNZ t,3F % store char |
|||
SET t,NL % terminate token with NL,EOS |
|||
STBU t,tp |
|||
SET t,EOS |
|||
INCL tp,1 |
|||
STBU t,tp |
|||
JMP 4F % continue |
|||
3H STBU c,tp % store char |
|||
4H INCL tp,1 % update pointers |
|||
INCL p,1 |
|||
JMP 2B % LOOP |
|||
5H SET t,NL % terminate last token and buffer |
|||
STBU t,tp |
|||
SET t,EOS |
|||
INCL tp,1 |
|||
STBU t,tp |
|||
% next part is not really necessary |
|||
% program runs only once |
|||
% INCL tp,1 % terminate buffer |
|||
% STBU t,tp |
|||
LDA tp,token % reset token pointer |
|||
% REPEAT |
|||
2H ADD p,tp,0 % start of token |
|||
TRAP 0,Fputs,StdOut % output token |
|||
ADD tp,tp,p |
|||
INCL tp,1 % step to next token |
|||
LDBU t,tp |
|||
PBNZ t,2B % UNTIL EOB(uffer) |
|||
TRAP 0,Halt,0</lang> |
|||
Output: |
|||
<pre>~/MIX/MMIX/Progs> mmix tokenizing |
|||
Hello |
|||
How |
|||
Are |
|||
You |
|||
Today</pre> |
|||
=={{header|Modula-3}}== |
=={{header|Modula-3}}== |