%{
#include <stdio.h>
// int commented_lines = 0;
// FILE *fptr;
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int stop = 0;
%}
%%
global {
if(stop == 0){
if(flag1 == 0){
flag1++;
printf("GLOBAL CONFIG\n---------------\n");
}else{
printf("global not present at the top");
stop = 1;
}
}
}
\{ {
if(stop == 0){
if(flag1 != 1 && flag3 == 0){
printf("Error not after global");
exit(0);
}else{
flag1++;
}
}
}
[ \t]
\n {
if(stop == 0){
if(flag1 != 2){
printf("\n");
}
}
}
[a-zA-Z]+[a-zA-Z0-9_]*[ \t]*\=[ \t]*([0-9]+(\.[0-9])*|(\/[a-zA-Z]*)*) {
if(stop == 0){
if(flag1 == 2){
flag1++;
}
if(flag1 != 3 && flag3==0){
printf("Error not after brackets");
exit(0);
}else{
printf("%s", yytext);
}
}
}
\}\; {
if(stop == 0){
if(flag1 != 3 && flag3 == 0){
printf("Error not after optional identifiers");
printf("flag: %d", flag1);
exit(0);
}else{
flag1++;
}
}
}
host {
if(stop == 0){
if(flag1 < 4){
printf("GLOBAL not present at top");
exit(0);
}else{
printf("HOST");
flag1++;
flag2 = 1;
flag3 =1;
}
}
}
\"[0-9a-zA-Z\-\.]*\" {
if(stop == 0){
if(flag2 != 1){
printf("Error not after host");
exit(0);
}else{
flag2 = 0;
printf(" %s CONFIG\n--------------", yytext);
}
}
}
%%
int main(int argc, char *argv[]){
yyin = fopen(argv[1], "r");
// fptr = fopen("code.c", "a");
yylex();
fclose(yyin);
// fclose(fptr);
// printf
("
Number of commented lines
= %d", commented_lines); }
int yywrap(){
return 1;
}
JXsKICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgLy8gaW50IGNvbW1lbnRlZF9saW5lcyA9IDA7CiAgICAvLyBGSUxFICpmcHRyOwogICAgaW50IGZsYWcxID0gMDsKICAgIGludCBmbGFnMiA9IDA7CiAgICBpbnQgZmxhZzMgPSAwOwogICAgaW50IHN0b3AgPSAwOwolfQoKJSUKZ2xvYmFsICB7CiAgICAgICAgICAgIGlmKHN0b3AgPT0gMCl7CiAgICAgICAgICAgICAgICBpZihmbGFnMSA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBmbGFnMSsrOwogICAgICAgICAgICAgICAgICAgIHByaW50ZigiR0xPQkFMIENPTkZJR1xuLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiZ2xvYmFsIG5vdCBwcmVzZW50IGF0IHRoZSB0b3AiKTsKICAgICAgICAgICAgICAgICAgICBzdG9wID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KXHsgICAgICB7CiAgICAgICAgICAgIGlmKHN0b3AgPT0gMCl7CiAgICAgICAgICAgICAgICBpZihmbGFnMSAhPSAxICYmIGZsYWczID09IDApewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Igbm90IGFmdGVyIGdsb2JhbCIpOwogICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBmbGFnMSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQpbIFx0XQpcbiAgICAgIHsKICAgICAgICAgICAgaWYoc3RvcCA9PSAwKXsKICAgICAgICAgICAgICAgIGlmKGZsYWcxICE9IDIpewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAKICAgICAgICB9ClthLXpBLVpdK1thLXpBLVowLTlfXSpbIFx0XSpcPVsgXHRdKihbMC05XSsoXC5bMC05XSkqfChcL1thLXpBLVpdKikqKSAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RvcCA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmbGFnMSA9PSAyKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZzErKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmxhZzEgIT0gMyAmJiBmbGFnMz09MCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Igbm90IGFmdGVyIGJyYWNrZXRzIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLCB5eXRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpcfVw7ICAgIHsKICAgICAgICAgICAgaWYoc3RvcCA9PSAwKXsKICAgICAgICAgICAgICAgIGlmKGZsYWcxICE9IDMgJiYgZmxhZzMgPT0gMCl7CiAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIG5vdCBhZnRlciBvcHRpb25hbCBpZGVudGlmaWVycyIpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJmbGFnOiAlZCIsIGZsYWcxKTsKICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBmbGFnMSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQpob3N0ICAgIHsKICAgICAgICAgICAgaWYoc3RvcCA9PSAwKXsKICAgICAgICAgICAgICAgIGlmKGZsYWcxIDwgNCl7CiAgICAgICAgICAgICAgICBwcmludGYoIkdMT0JBTCBub3QgcHJlc2VudCBhdCB0b3AiKTsKICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIkhPU1QiKTsKICAgICAgICAgICAgICAgICAgICBmbGFnMSsrOwogICAgICAgICAgICAgICAgICAgIGZsYWcyID0gMTsKICAgICAgICAgICAgICAgICAgICBmbGFnMyA9MTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KXCJbMC05YS16QS1aXC1cLl0qXCIgICAgIHsKICAgIGlmKHN0b3AgPT0gMCl7CiAgICAgICAgICAgICAgICBpZihmbGFnMiAhPSAxKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Igbm90IGFmdGVyIGhvc3QiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZzIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgQ09ORklHXG4tLS0tLS0tLS0tLS0tLSIsIHl5dGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB9CiUlCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKXsKICAgIHl5aW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwogICAgLy8gZnB0ciA9IGZvcGVuKCJjb2RlLmMiLCAiYSIpOwogICAgeXlsZXgoKTsKICAgIGZjbG9zZSh5eWluKTsKICAgIC8vIGZjbG9zZShmcHRyKTsKICAgIC8vIHByaW50ZigiTnVtYmVyIG9mIGNvbW1lbnRlZCBsaW5lcyA9ICVkIiwgY29tbWVudGVkX2xpbmVzKTsKfQoKaW50IHl5d3JhcCgpewogICAgcmV0dXJuIDE7Cn0=