hey, i have a scanner program use C to scanner(LCG) pascal programing
how to create parser use the my scanner?
please give me example to create parser use my scanner
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include <cstdio>
void keyw(char *p);
int i = 0, id = 0, kw = 0, num = 0, op = 0;
char keys[32][10] = { "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"
};
int main(void)
{
char ch, str[25], seps[16] = " \t\n,();{}[]#\"<>", oper[] = "!%^&*-+=~|.<>/?";
int j;
char fname[50];
FILE *f1;
printf("Masukkan file yang ingin di scan contohnya(drive:\\nama_folder\\nama_file)\n");
printf("Masukkan juga ekstensi filenya .c .pas .txt \n\n");
scanf("%s", fname);
f1 = fopen(fname, "r");
if (f1 == NULL)
{
printf("File Tidak Ada Atau File Tidak Ditemukan");
getchar;
return 0;
}
while ((ch = fgetc(f1)) != EOF)
{
for (j = 0; j <= 14; j++)
{
if (ch == oper[j])
{
printf("%c operator\n\n", ch);
op++;
str[i] = '\0';
keyw(str);
}
}
for (j = 0; j <= 14; j++)
{
if (i == -1)
break;
if (ch == seps[j])
{
if (ch == '#')
{
while (ch != '>')
{
printf("%c", ch);
ch = fgetc(f1);
}
printf("%c file header\n\n", ch);
i = -1;
break;
}
if (ch == '"')
{
do
{
ch = fgetc(f1);
printf("%c", ch);
} while (ch != '"');
printf("\b argument\n\n");
i = -1;
break;
}
str[i] = '\0';
keyw(str);
}
}
if (i != -1)
{
str[i] = ch;
i++;
}
else
i = 0;
}
printf("Keywords: %d\nIdentifiers: %d\nOperators: %d\nAngka: %d\n", kw, id, op, num);
}
void keyw(char *p)
{
int k, flag = 0;
for (k = 0; k <= 31; k++)
{
if (strcmp(keys[k], p) == 0)
{
printf("%s keyword\n\n", p);
kw++;
flag = 1;
break;
}
}
if (flag == 0)
{
if (isdigit(p[0]))
{
printf("%s bilangan(angka) \n\n", p);
num++;
}
else
{
if (p[0] != 13 && p[0] != 10)
if (p[0] != '\0')
{
printf("%s identifier \n\n", p);
id++;
}
}
}
i = -1;
}