26 lines
952 B
Forth
26 lines
952 B
Forth
\ Rosetta Code Strip Comment
|
|
|
|
: LASTCHAR ( addr len -- addr len c) 2DUP + C@ ;
|
|
: COMMENT? ( char -- ? ) S" #;" ROT SCAN NIP ; \ test char for "#;"
|
|
: -LEADING ( addr len -- addr' len') BL SKIP ; \ remove leading space characters
|
|
|
|
: -COMMENT ( addr len -- addr len') \ removes # or ; comments
|
|
1-
|
|
BEGIN
|
|
LASTCHAR COMMENT? 0=
|
|
WHILE \ while not a comment char...
|
|
1- \ reduce length by 1
|
|
REPEAT
|
|
1- ; \ remove 1 more (the comment char)
|
|
|
|
: -TRAILING ( adr len -- addr len') \ remove trailing spaces
|
|
1-
|
|
BEGIN
|
|
LASTCHAR BL =
|
|
WHILE \ while lastchar = blank
|
|
1- \ reduce length by 1
|
|
REPEAT
|
|
1+ ;
|
|
|
|
: COMMENT-STRIP ( addr len -- addr 'len) -LEADING -COMMENT -TRAILING ;
|