%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SYMBOLS 100
char *symbolTable[MAX_SYMBOLS];
int symbolCount = 0;
int yylex(); // Fix: Declare yylex()
void addToSymbolTable(char *lexeme) {
for (int i = 0; i < symbolCount; i++) {
if (strcmp(symbolTable[i], lexeme) == 0) return;
}
if (symbolCount < MAX_SYMBOLS) {
symbolTable[symbolCount++] = strdup(lexeme);
}
}
%}
%option noyywrap
%%
[ \t\n]+ /* Ignore whitespace */
\{[^}]*\} /* Ignore comments */
"and"|"begin"|"div"|"do"|"else"|"end"|"for"|"function"|"if"|"array"|
"mod"|"not"|"of"|"or"|"procedure"|"program"|"record"|"then"|"to"|
"type"|"var"|"while" { printf("KEYWORD: %s\n", yytext); }
[a-zA-Z][a-zA-Z0-9_]* { printf("IDENTIFIER: %s\n", yytext); addToSymbolTable(yytext); }
[0-9]+ { printf
("
INTEGER: %s\n", yytext); }
\"[^\"]*\" { printf("STRING: %s\n", yytext); }
"+"|"-"|"*"|"="|"<"|"<="|">"|">="|"<>"|"."|","|":"|";"|".."|":="|
"("|")"|"["|"]" { printf("SYMBOL: %s\n", yytext); }
. { printf("UNKNOWN TOKEN: %s\n", yytext); }
%%
int main() {
printf("Enter Pascal-like code:\n");
yylex();
printf("\nSymbol Table:\n");
for (int i = 0; i < symbolCount; i++) {
printf("%s\n", symbolTable[i]);
}
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBNQVhfU1lNQk9MUyAxMDAKY2hhciAqc3ltYm9sVGFibGVbTUFYX1NZTUJPTFNdOwppbnQgc3ltYm9sQ291bnQgPSAwOwoKaW50IHl5bGV4KCk7IC8vIEZpeDogRGVjbGFyZSB5eWxleCgpCgp2b2lkIGFkZFRvU3ltYm9sVGFibGUoY2hhciAqbGV4ZW1lKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN5bWJvbENvdW50OyBpKyspIHsKICAgICAgICBpZiAoc3RyY21wKHN5bWJvbFRhYmxlW2ldLCBsZXhlbWUpID09IDApIHJldHVybjsKICAgIH0KICAgIGlmIChzeW1ib2xDb3VudCA8IE1BWF9TWU1CT0xTKSB7CiAgICAgICAgc3ltYm9sVGFibGVbc3ltYm9sQ291bnQrK10gPSBzdHJkdXAobGV4ZW1lKTsKICAgIH0KfQolfQoKJW9wdGlvbiBub3l5d3JhcAoKJSUKClsgXHRcbl0rICAgICAgICAgICAgICAgLyogSWdub3JlIHdoaXRlc3BhY2UgKi8KXHtbXn1dKlx9ICAgICAgICAgICAgIC8qIElnbm9yZSBjb21tZW50cyAqLwoKImFuZCJ8ImJlZ2luInwiZGl2InwiZG8ifCJlbHNlInwiZW5kInwiZm9yInwiZnVuY3Rpb24ifCJpZiJ8ImFycmF5InwKIm1vZCJ8Im5vdCJ8Im9mInwib3IifCJwcm9jZWR1cmUifCJwcm9ncmFtInwicmVjb3JkInwidGhlbiJ8InRvInwKInR5cGUifCJ2YXIifCJ3aGlsZSIgICB7IHByaW50ZigiS0VZV09SRDogJXNcbiIsIHl5dGV4dCk7IH0KClthLXpBLVpdW2EtekEtWjAtOV9dKiAgeyBwcmludGYoIklERU5USUZJRVI6ICVzXG4iLCB5eXRleHQpOyBhZGRUb1N5bWJvbFRhYmxlKHl5dGV4dCk7IH0KClswLTldKyAgICAgICAgICAgICAgICAgeyBwcmludGYoIklOVEVHRVI6ICVzXG4iLCB5eXRleHQpOyB9CgpcIlteXCJdKlwiICAgICAgICAgICAgIHsgcHJpbnRmKCJTVFJJTkc6ICVzXG4iLCB5eXRleHQpOyB9CgoiKyJ8Ii0ifCIqInwiPSJ8IjwifCI8PSJ8Ij4ifCI+PSJ8Ijw+InwiLiJ8IiwifCI6InwiOyJ8Ii4uInwiOj0ifAoiKCJ8IikifCJbInwiXSIgICAgICAgIHsgcHJpbnRmKCJTWU1CT0w6ICVzXG4iLCB5eXRleHQpOyB9CgouICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJVTktOT1dOIFRPS0VOOiAlc1xuIiwgeXl0ZXh0KTsgfQoKJSUKCmludCBtYWluKCkgewogICAgcHJpbnRmKCJFbnRlciBQYXNjYWwtbGlrZSBjb2RlOlxuIik7CiAgICB5eWxleCgpOwoKICAgIHByaW50ZigiXG5TeW1ib2wgVGFibGU6XG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3ltYm9sQ291bnQ7IGkrKykgewogICAgICAgIHByaW50ZigiJXNcbiIsIHN5bWJvbFRhYmxlW2ldKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=