%{
#include < stdio. h>
%}
%%
/* ---------- KEYWORDS (Highest priority over identifiers) ---------- */
auto
| break
| case
| char
| const
| continue
| default
| do
| double
| else
| enum
| extern
| float | for
| goto
| if
| int
| long
| register
| return
| short
| signed
| sizeof
| static
| struct
| switch
| typedef
| union
| unsigned
| void
| volatile
| while
{ printf( "Keyword: %s\n", yytext); }
/* ---------- IDENTIFIERS ---------- */
[ a- zA- Z_] [ a- zA- Z0- 9 _] *
{ printf( "Identifier: %s\n", yytext); }
/* ---------- CONSTANTS ---------- */
/* Float constant before integer constant */
[ 0 - 9 ] + ". "[ 0 - 9 ] +
{ printf
( "
Float Constant
: %s\n", yytext); }
[ 0 - 9 ] +
{ printf
( "
Integer Constant
: %s\n", yytext); }
/* Character constant */
\'(.|\\.)\'
{ printf( "Character Constant: %s\n", yytext); }
/* String constant */
\"( [ ^\\"] | \\. ) * \"
{ printf( "String Constant: %s\n", yytext); }
/* ---------- OPERATORS ---------- */
/* Multi-character operators first */
\= \= | \! = | \<= | \>= | \& \&| \| \|| \+\+ | \-\-
{ printf( "Operator: %s\n", yytext); }
/* Single-character operators */
[ \+\-\*\/ \%\=\<\>\!]
{ printf( "Operator: %s\n", yytext); }
/* ---------- SEPARATORS ---------- */
[ ;, ( ) { } \[ \] ]
{ printf( "Separator: %s\n", yytext); }
/* ---------- SPECIAL SYMBOLS ---------- */
[ @ #$^~`]
{ printf( "Special Symbol: %s\n", yytext); }
/* ---------- WHITESPACE (Ignored) ---------- */
[ \t\n] +
{ }
/* ---------- INVALID / UNKNOWN ---------- */
.
{ printf( "Unknown Symbol: %s\n", yytext); }
%%
int main( )
{
yylex( ) ;
return 0 ;
}
int yywrap( )
{
return 1 ;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiV9CgolJQoKLyogLS0tLS0tLS0tLSBLRVlXT1JEUyAoSGlnaGVzdCBwcmlvcml0eSBvdmVyIGlkZW50aWZpZXJzKSAtLS0tLS0tLS0tICovCmF1dG98YnJlYWt8Y2FzZXxjaGFyfGNvbnN0fGNvbnRpbnVlfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZW51bXxleHRlcm58ZmxvYXR8Zm9yfGdvdG98aWZ8aW50fGxvbmd8cmVnaXN0ZXJ8cmV0dXJufHNob3J0fHNpZ25lZHxzaXplb2Z8c3RhdGljfHN0cnVjdHxzd2l0Y2h8dHlwZWRlZnx1bmlvbnx1bnNpZ25lZHx2b2lkfHZvbGF0aWxlfHdoaWxlCiAgICAgICAgeyBwcmludGYoIktleXdvcmQ6ICVzXG4iLCB5eXRleHQpOyB9CgovKiAtLS0tLS0tLS0tIElERU5USUZJRVJTIC0tLS0tLS0tLS0gKi8KW2EtekEtWl9dW2EtekEtWjAtOV9dKgogICAgICAgIHsgcHJpbnRmKCJJZGVudGlmaWVyOiAlc1xuIiwgeXl0ZXh0KTsgfQoKLyogLS0tLS0tLS0tLSBDT05TVEFOVFMgLS0tLS0tLS0tLSAqLwovKiBGbG9hdCBjb25zdGFudCBiZWZvcmUgaW50ZWdlciBjb25zdGFudCAqLwpbMC05XSsiLiJbMC05XSsKICAgICAgICB7IHByaW50ZigiRmxvYXQgQ29uc3RhbnQ6ICVzXG4iLCB5eXRleHQpOyB9CgpbMC05XSsKICAgICAgICB7IHByaW50ZigiSW50ZWdlciBDb25zdGFudDogJXNcbiIsIHl5dGV4dCk7IH0KCi8qIENoYXJhY3RlciBjb25zdGFudCAqLwpcJygufFxcLilcJwogICAgICAgIHsgcHJpbnRmKCJDaGFyYWN0ZXIgQ29uc3RhbnQ6ICVzXG4iLCB5eXRleHQpOyB9CgovKiBTdHJpbmcgY29uc3RhbnQgKi8KXCIoW15cXCJdfFxcLikqXCIKICAgICAgICB7IHByaW50ZigiU3RyaW5nIENvbnN0YW50OiAlc1xuIiwgeXl0ZXh0KTsgfQoKLyogLS0tLS0tLS0tLSBPUEVSQVRPUlMgLS0tLS0tLS0tLSAqLwovKiBNdWx0aS1jaGFyYWN0ZXIgb3BlcmF0b3JzIGZpcnN0ICovClw9XD18XCE9fFw8PXxcPj18XCZcJnxcfFx8fFwrXCt8XC1cLQogICAgICAgIHsgcHJpbnRmKCJPcGVyYXRvcjogJXNcbiIsIHl5dGV4dCk7IH0KCi8qIFNpbmdsZS1jaGFyYWN0ZXIgb3BlcmF0b3JzICovCltcK1wtXCpcL1wlXD1cPFw+XCFdCiAgICAgICAgeyBwcmludGYoIk9wZXJhdG9yOiAlc1xuIiwgeXl0ZXh0KTsgfQoKLyogLS0tLS0tLS0tLSBTRVBBUkFUT1JTIC0tLS0tLS0tLS0gKi8KWzssKCl7fVxbXF1dCiAgICAgICAgeyBwcmludGYoIlNlcGFyYXRvcjogJXNcbiIsIHl5dGV4dCk7IH0KCi8qIC0tLS0tLS0tLS0gU1BFQ0lBTCBTWU1CT0xTIC0tLS0tLS0tLS0gKi8KW0AjJF5+YF0KICAgICAgICB7IHByaW50ZigiU3BlY2lhbCBTeW1ib2w6ICVzXG4iLCB5eXRleHQpOyB9CgovKiAtLS0tLS0tLS0tIFdISVRFU1BBQ0UgKElnbm9yZWQpIC0tLS0tLS0tLS0gKi8KWyBcdFxuXSsKICAgICAgICB7IH0KCi8qIC0tLS0tLS0tLS0gSU5WQUxJRCAvIFVOS05PV04gLS0tLS0tLS0tLSAqLwouCiAgICAgICAgeyBwcmludGYoIlVua25vd24gU3ltYm9sOiAlc1xuIiwgeXl0ZXh0KTsgfQoKJSUKCmludCBtYWluKCkKewogICAgeXlsZXgoKTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKCkKewogICAgcmV0dXJuIDE7Cn0=