-
-
Save mohakhan/bc4dff99ce1c5d742ff0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%{ | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <errlibg.h> | |
#undef EXTERN | |
#include <Yacc.h> | |
#undef YYLMAX | |
#define YYLMAX 400 | |
long Len; | |
int i; | |
char *temp; | |
%} | |
%% | |
"typedef" {return TYPEDEF;} | |
"struct" {return STRUCT;} | |
"unsigned char" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("char")+1); | |
strcpy (yylval.C_type,"char"); | |
return CTYPE; | |
} | |
"unsigned int" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("int")+1); | |
strcpy (yylval.C_type,"int"); | |
return CTYPE; | |
} | |
"unsigned short" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("short")+1); | |
strcpy (yylval.C_type,"short"); | |
return CTYPE; | |
} | |
"char" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("char")+1); | |
strcpy (yylval.C_type,"char"); | |
return CTYPE; | |
} | |
"int" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("int")+1); | |
strcpy (yylval.C_type,"int"); | |
printf("%s \n",yylval.C_type); | |
return CTYPE; | |
} | |
"short" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("short")+1); | |
strcpy (yylval.C_type,"short"); | |
return CTYPE; | |
} | |
"long" { | |
yylval.C_type = | |
(char *) gimalloc_memAlloc | |
(strlen("long")+1); | |
strcpy (yylval.C_type,"long"); | |
return CTYPE; | |
} | |
"_set"[0-9]+";" { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
yylval.dataName = | |
(char *) gimalloc_memAlloc(Len); | |
for (i=1;i<Len-1;i++){ | |
yylval.dataName[i-1]=yytext[i]; | |
printf("yylval.dataName[i] is %c", | |
yylval.dataName[i]); | |
} | |
yylval.dataName[i-1] = '\0'; | |
printf(" Name is %s \n",yylval.dataName); | |
} | |
else | |
{ | |
yylval.dataName = NULL; | |
} | |
return SET_NUM;} | |
"sequence" {return SEQUENCE;} | |
"_sequence"[0-9]+";" { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
yylval.dataName = | |
(char *) gimalloc_memAlloc(Len); | |
for (i=1;i<Len-1;i++){ | |
yylval.dataName[i-1]=yytext[i]; | |
printf("yylval.dataName[i] is %c", | |
yylval.dataName[i]); | |
} | |
yylval.dataName[i-1] = '\0'; | |
printf(" Name is %s \n",yylval.dataName); | |
} | |
else | |
{ | |
yylval.dataName = NULL; | |
} | |
return SEQUENCE_NUM;} | |
"# "[ ]*"define" {return MASKDEF;} | |
"#define" {return DEFINE;} | |
"/*".*"*/"\n|"/*"[ ].*\n|"*"[ ].*\n {return COMMENT;} | |
"#ifndef"[ ].*|"#include"[ ].*|"extern"[ ].* {return IGNORE;} | |
"#endif"[ ].* {return ENDIF;} | |
u[;] {return ENDUNION;} | |
[{] {return L_BR;} | |
[}] {return R_BR;} | |
[0-9]+[]][;] { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
temp = (char *) gimalloc_memAlloc(Len); | |
strncpy(temp,(char *)yytext,Len-1); | |
yylval.length = atoi(temp); | |
return(LENGTH); | |
} | |
} | |
[0-9]+[,] { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
yylval.dataName = | |
(char *) gimalloc_memAlloc(Len); | |
strncpy(yylval.dataName, | |
(char *)yytext,Len-1); | |
yylval.dataName[Len-1] = '\0'; | |
} | |
else | |
{ | |
yylval.dataName = NULL; | |
} | |
return(NUMBER); | |
} | |
[0-9]+ { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
yylval.dataName =(char *) | |
gimalloc_memAlloc(Len); | |
strcpy(yylval.dataName,(char *)yytext); | |
return(NUMBER); | |
} | |
} | |
[a-zA-Z0-9_]*[;]|[a-zA-Z0-9_]*[[] { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
yylval.dataName = | |
(char *) gimalloc_memAlloc(Len); | |
strncpy(yylval.dataName, | |
(char *)yytext,Len-1); | |
yylval.dataName[Len-1] = '\0'; | |
printf("%s \n",yylval.dataName); | |
} | |
else | |
{ | |
yylval.dataName = NULL; | |
} | |
return(FIN); | |
} | |
[a-zA-Z0-9_]*" =" { return (ENUM); } | |
[a-zA-Z0-9_]* { | |
if (yyleng) | |
{ | |
Len = (yyleng + 1) * sizeof(char); | |
yylval.dataName = | |
(char *) gimalloc_memAlloc(Len); | |
strcpy(yylval.dataName, (char *)yytext); | |
printf("%s \n",yylval.dataName); | |
} | |
else | |
{ | |
yylval.dataName = NULL; | |
} | |
return(DATA); | |
} | |
[*][a-zA-Z0-9_]*[;] { | |
if (yyleng) | |
{ | |
Len = yyleng * sizeof(char); | |
printf("Length is %d", Len); | |
yylval.dataName = | |
(char *) gimalloc_memAlloc(Len); | |
strncpy(yylval.dataName, | |
(char *)yytext,Len-1); | |
yylval.dataName[Len-1] = '\0'; | |
temp = yylval.dataName + 1; | |
memcpy(yylval.dataName,temp,Len); | |
printf("%s \n",yylval.dataName); | |
} | |
else | |
{ | |
yylval.dataName = NULL; | |
} | |
printf("RETTTTTTTUUUUUURRRRNNN"); | |
return(STRING); | |
} | |
\n/(.|\n) { | |
return(NEWLINE); | |
} | |
%% | |
yyerror(char *i_string) | |
{ | |
char *mes; | |
int lineno = 0; /* line number */ | |
Trace("yyerror"); | |
lineno++; | |
YY_ERR_Send_Msg(YY_LINE_NUMBER_CTL, &lineno, sizeof(int) ); | |
lineno--; | |
if (yytext) | |
{ | |
ERR_Report_3(YY_SYNTAX_ERROR_NEAR_ERR,yytext,in_f,"\n"); | |
} | |
else | |
{ | |
ERR_Report_3(YY_SYNTAX_ERROR_NEAR_ERR," ",in_f,"\n"); | |
} | |
} | |
ASN1wrap() | |
{ | |
return(1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment