aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-02-07 18:10:15 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-02-07 18:10:15 +0000
commitd1bb4f42bd6ab8e8f0d0dfe7acb45183e4629760 (patch)
treebed66cf902367f0d28e152e0d5612480e873ca52
parent1a89a34dfc04a32ec5c25f6bb6d91173acf31679 (diff)
downloadCompiler-d1bb4f42bd6ab8e8f0d0dfe7acb45183e4629760.tar.gz
Compiler-d1bb4f42bd6ab8e8f0d0dfe7acb45183e4629760.zip
Went about the issue with yyleng being of weird type
-rw-r--r--.clang_complete2
-rw-r--r--c_lexer/include/c_lexer.hpp4
-rw-r--r--c_lexer/src/c_lexer.flex13
-rw-r--r--c_lexer/src/main.cpp2
-rw-r--r--c_lexer/test/test_lex.c8
-rw-r--r--makefile2
6 files changed, 19 insertions, 12 deletions
diff --git a/.clang_complete b/.clang_complete
index 30679be..825bf46 100644
--- a/.clang_complete
+++ b/.clang_complete
@@ -1 +1 @@
--Iinclude
+-Ic_lexer/include
diff --git a/c_lexer/include/c_lexer.hpp b/c_lexer/include/c_lexer.hpp
index 54b1b81..90c4d53 100644
--- a/c_lexer/include/c_lexer.hpp
+++ b/c_lexer/include/c_lexer.hpp
@@ -19,12 +19,12 @@ extern std::string *yylval;
// flex function to run on input
extern int yylex();
-extern size_t yyleng;
-
extern int lineCount;
extern int spaceCount;
extern int sourceLineCount;
+extern int charLength;
+
extern std::string fileName;
// get the correct output
diff --git a/c_lexer/src/c_lexer.flex b/c_lexer/src/c_lexer.flex
index c2a42c4..6c7a424 100644
--- a/c_lexer/src/c_lexer.flex
+++ b/c_lexer/src/c_lexer.flex
@@ -11,6 +11,8 @@ int lineCount = 1;
int spaceCount = 1;
int sourceLineCount = 1;
+int charLength = 0;
+
std::string fileName;
%}
@@ -49,53 +51,63 @@ ALL .
{KEYWORD} {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Keyword;
}
{IDENTIFIER} {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Identifier;
}
{OPERATOR} {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Operator;
}
{FRACTIONALCONSTANT}{EXPONENTPART}?{FLOATINGSUFFIX}? {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Constant;
}
([0-9]+){EXPONENTPART}{FLOATINGSUFFIX}? {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Constant;
}
{HEXCONSTANT}{INTEGERSUFFIX}? {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Constant;
}
{DECIMALCONSTANT}{INTEGERSUFFIX}? {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Constant;
}
{OCTALCONSTANT}{INTEGERSUFFIX}? {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Constant;
}
{CHARCONSTANT} {
std::string tmp(yytext);
yylval = new std::string(tmp.substr(1, tmp.length()-2));
+ charLength = (int)yyleng;
return Constant;
}
{STRINGLITERAL} {
std::string tmp(yytext);
yylval = new std::string(tmp.substr(1, tmp.length()-2));
+ charLength = (int)yyleng;
return StringLiteral;
}
@@ -125,6 +137,7 @@ ALL .
{ALL} {
yylval = new std::string(yytext);
+ charLength = (int)yyleng;
return Invalid;
}
diff --git a/c_lexer/src/main.cpp b/c_lexer/src/main.cpp
index 8b20098..1e45bbd 100644
--- a/c_lexer/src/main.cpp
+++ b/c_lexer/src/main.cpp
@@ -65,7 +65,7 @@ int main() {
printf("%s,\n", toJson(classType, text, streamLine, sourceCol, sourceLine, fileName).c_str());
- spaceCount += yyleng;
+ spaceCount += charLength;
}
printf("{}\n]\n");
diff --git a/c_lexer/test/test_lex.c b/c_lexer/test/test_lex.c
index 9db9054..e962c60 100644
--- a/c_lexer/test/test_lex.c
+++ b/c_lexer/test/test_lex.c
@@ -1,14 +1,8 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-#include <math.h>
-
-#define POTATO 5
-
int main(int argc, char* argv[]) {
char* h = "Hello World\"";
int j = POTATO;
int u = 2398uL;
float rt = 23.238e-283;
+ char x = 'a';
return 0;
}
diff --git a/makefile b/makefile
index 4c0b301..1f4c829 100644
--- a/makefile
+++ b/makefile
@@ -29,7 +29,7 @@ $(LEXSRCDIR)/%.yy.cpp : $(LEXSRCDIR)/%.flex
clean:
@echo "Cleaning..."
- @echo " rm -r $(LEXBUILDDIR) bin $(LEXSRCDIR)/c_lexer.yy.cpp"; rm -r $(LEXBUILDDIR) bin $(LEXSRCDIR)/c_lexer.yy.cpp
+ @echo " rm -r $(LEXBUILDDIR) bin $(LEXSRCDIR)/c_lexer.yy.cpp2"; rm -r $(LEXBUILDDIR) bin $(LEXSRCDIR)/c_lexer.yy.cpp
.PHONY: clean