Repository navigation
Expand file tree
/
Copy pathpython.l
More file actions
82 lines (72 loc) · 1.59 KB
/
Copy pathpython.l
File metadata and controls
82 lines (72 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
%option noyywrap
%{
using namespace std;
#include <iostream>
#include <stdlib.h>
#include <string>
#include "python.tab.h"
#include <vector>
vector<char*> vecOfStrings;
%}
%%
#[^\n]* {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return COMMENT;}
\n {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return ENDL;}
[0-9]* {yylval.intv=atoi(yytext); return INT;}
\"([[:print:]]{-}[\"\n])*\" {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return STRING;}
\'([[:print:]]{-}[\'\n])*\' {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return STRING;}
if[ ]+ {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return IFID;}
def[ ]+ {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return FUNCDEF;}
return[ ]+ {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return RETURNS;}
print([ ]*)\( {return PRINT;}
else: {
return ELSE;
}
[\+\-\/\*] {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return MATHSYMBOL;}
[a-zA-Z0-9]* {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return IDENT;}/*obviously would use a diffrent regexp for string*/
==|>|<|>=|<=|!= {
yylval.s=strdup(yytext);
vecOfStrings.push_back(yylval.s);
return BOOLSYMBOL;}
= {return '=';}
: {return ':';}
"(" {return '(';}
")" {return ')';}
"," {return ',';}
^[ ]+ {
yylval.intv=strlen(yytext);
return INDENT;
}
. ;
%%
void delstringsflex(){
for(int i=0;i<vecOfStrings.size();i++){
free(vecOfStrings[i]);
}
}