Skip to content

Instantly share code, notes, and snippets.

@mohakhan

mohakhan/Lex.lex Secret

Last active August 29, 2015 14:13
Show Gist options
  • Save mohakhan/bc4dff99ce1c5d742ff0 to your computer and use it in GitHub Desktop.
Save mohakhan/bc4dff99ce1c5d742ff0 to your computer and use it in GitHub Desktop.
%{
#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