Strip block comments: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: syntax coloured) |
No edit summary |
||
Line 2,691: | Line 2,691: | ||
say strip_block_comments(ARGF.slurp);</lang> |
say strip_block_comments(ARGF.slurp);</lang> |
||
=={{header|SNOBOL4}}== |
|||
{{works with|SNOBOL4, SPITBOL for Linux}} |
|||
<lang SNOBOL4> |
|||
* Program: strip_block_comments.sbl |
|||
* To run: sbl -r extract_extension.sbl |
|||
* Description: Strip block comments. |
|||
* Can use different begin and end delimiters. |
|||
* Handles comment nesting and unmatched end delimiters. |
|||
* Unmatched begin delimiters remove text to end of file. |
|||
* Does not handle quoted delimiters. |
|||
* Most null lines are removed, which may not be |
|||
* what is desired. |
|||
* Comment: Tested using the Spitbol for Linux version of SNOBOL4 |
|||
* Function strip_block_comments will read a file, or the text after |
|||
* the END statement below. Parameter bcom is the beginning comment |
|||
* string and parameter ecom is the ending comment string. |
|||
* |
|||
define('strip_block_comments(bcom,ecom)break_chars,c,newc,pre,pc,b') |
|||
pat1 = breakx(*break_chars) . pre (*bcom | *gt(b,0) *ecom) . pc |
|||
:(strip_block_comments_end) |
|||
strip_block_comments |
|||
break_chars = substr(bcom,1,1) substr(ecom,1,1) |
|||
newc = "" |
|||
b = 0 |
|||
in1 |
|||
c = input :f(p60) |
|||
p10 |
|||
c ? pat1 = "" :f(p20) |
|||
* matches |
|||
le(b,0) :s(leb)f(gtb) |
|||
leb |
|||
b = leq(pc,bcom) b + 1 :f(leb2) |
|||
newc = newc pre :(p10) |
|||
leb2 |
|||
b = leq(pc,ecom) b - 1 :f(error) |
|||
:(p10) |
|||
gtb |
|||
b = leq(pc,bcom) b + 1 |
|||
b = leq(pc,ecom) b - 1 |
|||
:(p10) |
|||
* nomatches |
|||
p20 |
|||
newc = lt(b,1) newc c |
|||
ident(newc) :s(in1) |
|||
:(p50) |
|||
p50 |
|||
output = newc |
|||
newc = "" :(in1) |
|||
p60 |
|||
output = differ(newc) newc |
|||
:(return) |
|||
strip_block_comments_end |
|||
* Set "begin" comment delimiter (bcom) and "end" comment delimiter (ecom) below |
|||
bcom = "/*" |
|||
ecom = "*/" |
|||
* bcom = "{{*" |
|||
* ecom = "?/" |
|||
* Strip block comments from the text lines after the END statement |
|||
strip_block_comments(bcom,ecom) |
|||
END |
|||
/** |
|||
* Some comments |
|||
* longer comments here that we can parse. |
|||
* |
|||
* Rahoo |
|||
*/ |
|||
function subroutine() { |
|||
a = /* inline comment */ b + c ; |
|||
} |
|||
/*/ <-- tricky comments */ |
|||
/** |
|||
* Another comment. |
|||
*/ |
|||
function something() { |
|||
} |
|||
---------------------------------------------- |
|||
With nested comments/* Nested /* comment*/s*/*/! |
|||
Unmatched"/*" end delimiters simply remove |
|||
to end of file |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
function subroutine() { |
|||
a = b + c ; |
|||
} |
|||
function something() { |
|||
} |
|||
---------------------------------------------- |
|||
With nested comments*/! |
|||
Unmatched" |
|||
</pre> |
|||
=={{header|Swift}}== |
=={{header|Swift}}== |