yacc evaluate

 

YACC evaluate a given variable

First, make sure you have Flex, bison installed:
For installing on Ubuntu- sudo apt-get install flex bison

How to Compile and Run:

Clean and rebuild:
Copy
yacc -d parser.y lex lexer.l gcc lex.yy.c y.tab.c -o var_validator -ll ./var_validator
Copy
---Save as lexer.l--- %{ #include "y.tab.h" %} %% [a-zA-Z] { yylval = yytext[0]; return LETTER; } [0-9] { yylval = yytext[0]; return DIGIT; } "_" { yylval = '_'; return UNDERSCORE; } [ \t] ; /* Ignore whitespace */ \n { return '\n'; } . { return yytext[0]; } %% int yywrap() { return 1; }
Copy
---Save as parser.y--- %{ #include <stdio.h> int yylex(); void yyerror(char *); char var_name[100]; int pos = 0; %} %token LETTER DIGIT UNDERSCORE %% input: /* empty */ | input line ; line: variable '\n' { printf("Valid variable: %s\n", var_name); pos = 0; } | '\n' | error '\n' { pos = 0; yyerror(""); } ; variable: LETTER { var_name[pos++] = $1; var_name[pos] = '\0'; } | UNDERSCORE { var_name[pos++] = $1; var_name[pos] = '\0'; } | variable LETTER { var_name[pos++] = $2; var_name[pos] = '\0'; } | variable DIGIT { var_name[pos++] = $2; var_name[pos] = '\0'; } | variable UNDERSCORE { var_name[pos++] = $2; var_name[pos] = '\0'; } ; %% void yyerror(char *s) { fprintf(stderr, "Invalid variable name\n"); } int main() { printf("Enter variable names to validate (one per line, Ctrl+D to exit):\n"); yyparse(); return 0; }
Copy
pune Valid variable: pune 123Pune Invalid variable 123Pune

Comments

Popular posts from this blog

literal

built in functions