Strip block comments: Difference between revisions
Content added Content deleted
Line 1,818: | Line 1,818: | ||
=={{header|Prolog}}== |
=={{header|Prolog}}== |
||
Prolog enables grammar rules via the DCG that are ideally suited for this task . |
|||
<lang prolog> |
|||
:- system:set_prolog_flag(double_quotes,codes) . |
|||
strip_block_comments(INPUTz) |
|||
:- |
|||
strip_block_comments(INPUTz,OUTPUTz) , |
|||
system:format("```~n",[OUTPUTz]) , |
|||
system:format("~s~n",[OUTPUTz]) , |
|||
system:format("```~n",[OUTPUTz]) |
|||
. |
|||
strip_block_comments(INPUTz,OUTPUTz) |
|||
:- |
|||
prolog:phrase(block(OUTPUTz),INPUTz) |
|||
. |
|||
block([]) --> \+ [_] , ! . |
|||
block([CODE|OUTPUTz]) --> \+ comment , ! , [CODE] , block(OUTPUTz) . |
|||
block(OUTPUTz) --> comment , ! , block(OUTPUTz) . |
|||
comment --> comment_entr , zero_or_more(comment_each) , comment_exit . |
|||
comment_entr --> "/*" . |
|||
comment_each --> comment , ! . |
|||
comment_each --> \+ comment_exit , ! , [_] . |
|||
comment_exit --> "*/" . |
|||
zero_or_more(CALLABLE) --> call(CALLABLE) , ! , zero_or_more(CALLABLE) . |
|||
zero_or_more(_) --> ! . |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
/* |
|||
?- strip_block_comments( |
|||
" |
|||
/** |
|||
* Some comments |
|||
* longer comments here that we can parse. |
|||
* |
|||
* Rahoo |
|||
*/ |
|||
function subroutine() { |
|||
a = /* inline comment */ b + c ; |
|||
} |
|||
/*/ <-- tricky comments */ |
|||
/** |
|||
* Another comment. |
|||
*/ |
|||
function something() { |
|||
} |
|||
"). |
|||
``` |
|||
function subroutine() { |
|||
a = b + c ; |
|||
} |
|||
function something() { |
|||
} |
|||
``` |
|||
true . |
|||
?- |
|||
*/ |
|||
/* |
|||
?- strip_block_comments("abc/*p/*q*/r*/def") . |
|||
``` |
|||
abcdef |
|||
``` |
|||
true . |
|||
?- strip_block_comments("abcdef") . |
|||
``` |
|||
abcdef |
|||
``` |
|||
true . |
|||
</pre> |
|||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |
||
Solution using regular expressions. A procedure to stripBlocks() procedure is defined that will strip comments between any two delimeters. |
Solution using regular expressions. A procedure to stripBlocks() procedure is defined that will strip comments between any two delimeters. |