%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int token_count
= 1; // Token
number (for the order of tokens
)int line_number
= 1; // Line
number (for counting lines in input
)
void print_token(const char *token_type, const char *token_value) {
// Print the token
number, line
number, token type
, and lexeme
printf("%-12d %-15d %-15s %s\n", token_count++, line_number, token_type, token_value);
}
%}
/* Definitions Section */
%%
"int"|"float"|"char"|"if"|"else" { print_token("KEYWORD", yytext); }
"+"|"-"|"*"|"/"|"=" { print_token("OPERATOR", yytext); }
[0-9]+ { print_token("NUMBER", yytext); }
[a-zA-Z_][a-zA-Z0-9_]* { print_token("IDENTIFIER", yytext); }
[ \t\r]+ ; /* Skip whitespace (spaces, tabs, carriage returns) */
\n { line_number++; } /* Increment line number on newline */
. { print_token("UNKNOWN", yytext); } /* Catch-all rule for unrecognized characters */
%%
int yywrap() {
return 1;
}
int main() {
printf("TOKEN NO LINE NO TOKEN LEXEME\n");
yylex(); /* Call the lexer */
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50IHRva2VuX2NvdW50ID0gMTsgLy8gVG9rZW4gbnVtYmVyIChmb3IgdGhlIG9yZGVyIG9mIHRva2VucykKaW50IGxpbmVfbnVtYmVyID0gMTsgLy8gTGluZSBudW1iZXIgKGZvciBjb3VudGluZyBsaW5lcyBpbiBpbnB1dCkKCnZvaWQgcHJpbnRfdG9rZW4oY29uc3QgY2hhciAqdG9rZW5fdHlwZSwgY29uc3QgY2hhciAqdG9rZW5fdmFsdWUpIHsKICAgIC8vIFByaW50IHRoZSB0b2tlbiBudW1iZXIsIGxpbmUgbnVtYmVyLCB0b2tlbiB0eXBlLCBhbmQgbGV4ZW1lCiAgICBwcmludGYoIiUtMTJkICUtMTVkICUtMTVzICVzXG4iLCB0b2tlbl9jb3VudCsrLCBsaW5lX251bWJlciwgdG9rZW5fdHlwZSwgdG9rZW5fdmFsdWUpOwp9CiV9CgovKiBEZWZpbml0aW9ucyBTZWN0aW9uICovCiUlCiJpbnQifCJmbG9hdCJ8ImNoYXIifCJpZiJ8ImVsc2UiIHsgcHJpbnRfdG9rZW4oIktFWVdPUkQiLCB5eXRleHQpOyB9CiIrInwiLSJ8IioifCIvInwiPSIgeyBwcmludF90b2tlbigiT1BFUkFUT1IiLCB5eXRleHQpOyB9ClswLTldKyB7IHByaW50X3Rva2VuKCJOVU1CRVIiLCB5eXRleHQpOyB9ClthLXpBLVpfXVthLXpBLVowLTlfXSogeyBwcmludF90b2tlbigiSURFTlRJRklFUiIsIHl5dGV4dCk7IH0KWyBcdFxyXSsgOyAvKiBTa2lwIHdoaXRlc3BhY2UgKHNwYWNlcywgdGFicywgY2FycmlhZ2UgcmV0dXJucykgKi8KXG4geyBsaW5lX251bWJlcisrOyB9IC8qIEluY3JlbWVudCBsaW5lIG51bWJlciBvbiBuZXdsaW5lICovCi4geyBwcmludF90b2tlbigiVU5LTk9XTiIsIHl5dGV4dCk7IH0gLyogQ2F0Y2gtYWxsIHJ1bGUgZm9yIHVucmVjb2duaXplZCBjaGFyYWN0ZXJzICovCiUlCgppbnQgeXl3cmFwKCkgewogICAgcmV0dXJuIDE7Cn0KCmludCBtYWluKCkgewogICAgcHJpbnRmKCJUT0tFTiBOTyBMSU5FIE5PIFRPS0VOIExFWEVNRVxuIik7CiAgICB5eWxleCgpOyAvKiBDYWxsIHRoZSBsZXhlciAqLwogICAgcmV0dXJuIDA7Cn0=