Implement sequence matcher and parser magic

This commit is contained in:
Jan
2021-02-13 00:12:26 +01:00
parent fe1f391bcc
commit 0f70f9586c
48 changed files with 1061 additions and 141 deletions

View File

@ -3,6 +3,7 @@
#include <iostream>
#include "Impl/HeaderLexer.h"
#include "Impl/HeaderParser.h"
#include "Parsing/ParsingException.h"
#include "Parsing/Impl/CommentRemovingStreamProxy.h"
#include "Parsing/Impl/DefinesStreamProxy.h"
@ -53,100 +54,8 @@ bool HeaderFileReader::ReadHeaderFile(IDataRepository* repository)
SetupStreamProxies();
auto lexer = std::make_unique<HeaderLexer>(m_stream);
const auto lexer = std::make_unique<HeaderLexer>(m_stream);
const auto parser = std::make_unique<HeaderParser>(lexer.get(), repository);
try
{
/*while (true)
{
auto line = m_stream->NextLine();
if (line.IsEof())
break;
std::cout << "Line " << line.m_filename.get() << ":" << line.m_line_number << ": " << line.m_line << "\n";
}*/
auto eof = false;
while (!eof)
{
const auto& token = lexer->GetToken(0);
switch (token.m_type)
{
case HeaderParserValueType::END_OF_FILE:
case HeaderParserValueType::INVALID:
eof = true;
break;
case HeaderParserValueType::CHARACTER:
std::cout << "Token " << token.CharacterValue() << "\n";
break;
case HeaderParserValueType::IDENTIFIER:
std::cout << "Token IDENTIFIER \"" << token.IdentifierValue() << "\"\n";
break;
case HeaderParserValueType::STRING:
std::cout << "Token STRING \"" << token.StringValue() << "\"\n";
break;
case HeaderParserValueType::INTEGER:
std::cout << "Token INTEGER " << token.IntegerValue() << "\n";
break;
case HeaderParserValueType::FLOATING_POINT:
std::cout << "Token FLOATINGPOINT " << token.FloatingPointValue() << "\n";
break;
case HeaderParserValueType::DECLSPEC:
std::cout << "Token DECLSPEC\n";
break;
case HeaderParserValueType::ALIGN:
std::cout << "Token ALIGN\n";
break;
case HeaderParserValueType::ALIGNAS:
std::cout << "Token ALIGNAS\n";
break;
case HeaderParserValueType::CONST:
std::cout << "Token CONST\n";
break;
case HeaderParserValueType::ENUM:
std::cout << "Token ENUM\n";
break;
case HeaderParserValueType::NAMESPACE:
std::cout << "Token NAMESPACE\n";
break;
case HeaderParserValueType::STRUCT:
std::cout << "Token STRUCT\n";
break;
case HeaderParserValueType::TYPEDEF:
std::cout << "Token TYPEDEF\n";
break;
case HeaderParserValueType::UNION:
std::cout << "Token UNION\n";
break;
default:
std::cout << "Token UNKNOWN\n";
break;
}
lexer->PopTokens(1);
}
}
catch (const ParsingException& e)
{
std::cout << "Error: " << e.FullMessage() << std::endl;
}
return true;
return parser->Parse();
}