/*
Jacob Sanchez
September 1, 2022
CS 370, LAB2_1
Added int line, to count line numbers.
Changed fprintf of error message to match the line number to where the error occurred.
Added regex and code to ignore newlines inside of comments.
Changed debug to 1 so that error messages display.
*/
/* simple lex program which removes comments from a source program
The main key is that a variable "comment" is set when the start of a comment
is seen and then unset when the ending set is seen. It is possible to have
two starts closed by on end.
Shaun Cooper
January 2015
*/
%{
int line = 1 ; /* New variable for counting line number*/
int comment = 0 ;
int debug= 1 ; /* prints out debug statements if desired */
%}
%%
"\n" { line++ ;
if ( ! comment) printf( "\n") ; } /* New rule to ignore new lines when they're in comments*/
"/*" {
if (comment && debug) fprintf(stderr,
" >>>>>>>> line %d: Possible Nested comment <<<<<<<<<<\n", line); /*Added ", line" inside fprintf to match line to %d*/
comment = 1 ;
}
"*/ " {
if ( ! comment) printf( "%s",yytext); /*print out if it is not in a comment */
comment = 0 ;
}
. { if ( ! comment) printf( "%s",yytext);}
%%
int yywrap( void)
{ return 1 ;
}
int main( )
{
yylex( ) ;
}
ICAgICAgICAgLyoKICAgICAgICAgICAgSmFjb2IgU2FuY2hlegogICAgICAgICAgICBTZXB0ZW1iZXIgMSwgMjAyMgogICAgICAgICAgICBDUyAzNzAsIExBQjJfMQoKICAgICAgICAgICAgQWRkZWQgaW50IGxpbmUsIHRvIGNvdW50IGxpbmUgbnVtYmVycy4KICAgICAgICAgICAgQ2hhbmdlZCBmcHJpbnRmIG9mIGVycm9yIG1lc3NhZ2UgdG8gbWF0Y2ggdGhlIGxpbmUgbnVtYmVyIHRvIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZC4KICAgICAgICAgICAgQWRkZWQgcmVnZXggYW5kIGNvZGUgdG8gaWdub3JlIG5ld2xpbmVzIGluc2lkZSBvZiBjb21tZW50cy4KICAgICAgICAgICAgQ2hhbmdlZCBkZWJ1ZyB0byAxIHNvIHRoYXQgZXJyb3IgbWVzc2FnZXMgZGlzcGxheS4KICAgICAgICAgKi8KCiAgICAgICAgIC8qIHNpbXBsZSBsZXggcHJvZ3JhbSB3aGljaCByZW1vdmVzIGNvbW1lbnRzIGZyb20gYSBzb3VyY2UgcHJvZ3JhbQogICAgICAgICAgICBUaGUgbWFpbiBrZXkgaXMgdGhhdCBhIHZhcmlhYmxlICJjb21tZW50IiBpcyBzZXQgd2hlbiB0aGUgc3RhcnQgb2YgYSBjb21tZW50CiAgICAgICAgICAgIGlzIHNlZW4gYW5kIHRoZW4gdW5zZXQgd2hlbiB0aGUgZW5kaW5nIHNldCBpcyBzZWVuLiAgSXQgaXMgcG9zc2libGUgdG8gaGF2ZQogICAgICAgICAgICB0d28gc3RhcnRzIGNsb3NlZCBieSBvbiBlbmQuCgogICAgICAgICAgICBTaGF1biBDb29wZXIKICAgICAgICAgICAgSmFudWFyeSAyMDE1CgogICAgICAgICAqLwolewogICAgICAgIGludCBsaW5lID0gMTsgLyogTmV3IHZhcmlhYmxlIGZvciBjb3VudGluZyBsaW5lIG51bWJlciovCiAgICAgICAgaW50IGNvbW1lbnQgPSAwOwogICAgICAgIGludCBkZWJ1Zz0xOyAgLyogcHJpbnRzIG91dCBkZWJ1ZyBzdGF0ZW1lbnRzIGlmIGRlc2lyZWQgKi8KJX0KJSUKIlxuIiAgICB7bGluZSsrOwogICAgICAgICAgaWYgKCFjb21tZW50KSBwcmludGYoIlxuIik7fSAgLyogTmV3IHJ1bGUgdG8gaWdub3JlIG5ldyBsaW5lcyB3aGVuIHRoZXkncmUgaW4gY29tbWVudHMqLwoiLyoiCXsKCWlmIChjb21tZW50ICYmIGRlYnVnKSBmcHJpbnRmKHN0ZGVyciwKCQkiID4+Pj4+Pj4+IGxpbmUgJWQ6IFBvc3NpYmxlIE5lc3RlZCBjb21tZW50IDw8PDw8PDw8PDxcbiIsIGxpbmUpOyAvKkFkZGVkICIsIGxpbmUiIGluc2lkZSBmcHJpbnRmIHRvIG1hdGNoIGxpbmUgdG8gJWQqLwoJY29tbWVudCA9IDE7Cgl9CgoiKi8iCXsKICAgICAgICAgIGlmICghY29tbWVudCkgcHJpbnRmKCIlcyIseXl0ZXh0KTsgLypwcmludCBvdXQgaWYgaXQgaXMgbm90IGluIGEgY29tbWVudCAqLwogIAkgIGNvbW1lbnQgPSAwOwoJfQouICAgICAgIHsgaWYgKCFjb21tZW50KSBwcmludGYoIiVzIix5eXRleHQpO30KCiUlCgppbnQgeXl3cmFwKHZvaWQpCnsgcmV0dXJuIDE7Cn0KCmludCBtYWluKCkKewogIHl5bGV4KCk7CiAgCn0KCg==
stdin
LyogdGhpcyBpcyBhIHNhbXBsZSBjb21tZW50IC8KICAgIGFuZCB0aGlzIHJlcHJlc2VudHMgbGluZXMgb2YgY29kZS4KICAgIC8gdGhpcywgb24gdGhlIG90aGVyIGhhbmQKICAgIC8qIGlzIGEgbmVzdGVkIGNvbW1lbnQKICAgIC8qIHRlcm1pbm5hdGVkIGhlcmUgKi8KICAgIC8gc2Vjb25kIHRlcm1pbmF0aW9uCi8KICoKICovCgogICAgc2VlIGhvdyBpdCB3b3JrcwoqLw==
/* this is a sample comment /
and this represents lines of code.
/ this, on the other hand
/* is a nested comment
/* terminnated here */
/ second termination
/
*
*/
see how it works
*/