Create Table

Using lex-yacc check create table in a C program YACC FILE Source Code: %{ #include void yyerror(char *); int yylex(); %} %token CREATE TABLE ID REFERENCES CHECK IN PRIMARY KEY DEFAULT DIGIT VARCHAR2 NUMBER INV FOREIGN %% program : CREATE TABLE ID '(' op ')' ';' {printf("Successful parsing");} ; op :decl |decl ',' op ; decl :dec |pk |fk ; dec : ID datatype '(' DIGIT ')' check default ; datatype :VARCHAR2 |NUMBER ; check : CHECK '(' ID IN '(' id ')' ')' | ; id : INV ID INV ',' id | INV ID INV ; default :DEFAULT DIGIT | ; fk : FOREIGN KEY '(' ID ')' REFERENCES ID '(' ID ')' ; pk : PRIMARY KEY '(' ID ')' ; %% void yyerror(char *s) { printf("Error %s",s); } int main() { yyparse(); return 0; } LEX FILE Source Code: %{ #include "y.tab.h" int yywrap(); void yyerror(char *); %} %% "create" {return CREATE;} "foreign" {return FOREIGN;} "table" {return TABLE;} "references" {return REFERENCES;} "check" {return CHECK;} "in" {return IN;} "primary" {return PRIMARY;} "key" {return KEY;} "default" {return DEFAULT;} "varchar2" {return VARCHAR2;} "number" {return NUMBER;} "'" {return INV;} [();,] {return *yytext;} [0-9]+ {return DIGIT;} [a-zA-Z][a-zA-Z0-9]* {return ID;} [ \t\n]+ ; . {printf("\n\n Error");} %% int yywrap() { return 1; } INPUT : create table student (eid number(10), ename varchar2(10), primary key(eid), primary key (ename), foreign key (ename) references employee(ename) ); OUTPUT : [cmasa1@localhost ~]$ yacc -d create.y [cmasa1@localhost ~]$ lex create.l [cmasa1@localhost ~]$ cc lex.yy.c y.tab.c -o abc [cmasa1@localhost ~]$ ./abc

Share:

0 comments