From d10f91dce5ecc2643496b7ef78149c0cdf37aaae Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sun, 16 Feb 2020 18:41:49 +0100 Subject: Try to match lex grammar (WIP) --- cpp.cpp | 37 +++++++++++++++++++++++++++++++++++-- debug.h | 3 +++ grammer.cpp | 2 +- test-lexer.cpp | 5 ++++- 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 debug.h diff --git a/cpp.cpp b/cpp.cpp index 2f65a19..8526cff 100644 --- a/cpp.cpp +++ b/cpp.cpp @@ -4,6 +4,7 @@ #include "cppbnf.h" #include "grammer.h" #include "minicc.h" +#include "debug.h" #include #include @@ -49,7 +50,29 @@ void CPP::preprocessing_tokenize(const std::string& s) auto charTokens {sourceToCharTokens(s)}; auto bnf{SubBNF(GetCppBNFLex(), "preprocessing-token")}; - Gram::Compiler compiler(bnf, "preprocessing-token"); + + // add to bnf to match whole file + bnf["file"] = { + {"preprocessing-token-list"}, + {"whitespace-list", "preprocessing-token-list"} + }; + bnf["preprocessing-token-list"] = { + {"preprocessing-token-padded"}, + {"preprocessing-token-list", "preprocessing-token-padded"} + }; + bnf["preprocessing-token-padded"] = { + {"preprocessing-token"}, + {"preprocessing-token", "whitespace-list"} + }; + bnf["whitespace-list"] = { + {"whitespace-char"}, + {"whitespace-list", "whitespace-char" } + }; + bnf["whitespace-char"] = { + {" "}, {"\t"}, {"\n"}, {"\r"} + }; + Gram::Compiler compiler(bnf, "file"); + debug = true; auto Tree = compiler.compile(charTokens); } @@ -111,7 +134,17 @@ void CPP::translate(const std::string& code) link(); } -TEST(Cpp, preprocessing_tokenize) { +class CppTest: public ::testing::Test +{ +protected: + CppTest() { + debug = false; + } + ~CppTest() { + } +}; + +TEST_F(CppTest, preprocessing_tokenize) { CPP::preprocessing_tokenize("int main() { return 1; }"); } diff --git a/debug.h b/debug.h new file mode 100644 index 0000000..28502dd --- /dev/null +++ b/debug.h @@ -0,0 +1,3 @@ +#pragma once + +extern bool debug; diff --git a/grammer.cpp b/grammer.cpp index 808c49e..9df4703 100644 --- a/grammer.cpp +++ b/grammer.cpp @@ -4,7 +4,7 @@ using namespace Gram; -static bool debug{false}; +bool debug{false}; void Debug(std::string s) { diff --git a/test-lexer.cpp b/test-lexer.cpp index 651dfae..b0706df 100644 --- a/test-lexer.cpp +++ b/test-lexer.cpp @@ -3,6 +3,7 @@ #include "lexer.h" #include "grammer.h" #include "minicc.h" +#include "debug.h" #include @@ -20,7 +21,9 @@ class Test: public ::testing::Test { protected: - Test(){} + Test(){ + debug = false; + } ~Test() override {} }; -- cgit v1.2.3