Util: Implement new JSON Job class

This commit is contained in:
Riyyi
2022-06-24 14:56:37 +02:00
parent 13d020a351
commit 68bc95fdf1
6 changed files with 41 additions and 23 deletions
+10 -6
View File
@@ -7,12 +7,13 @@
#include <cstddef>
#include <string>
#include "util/json/job.h"
#include "util/json/lexer.h"
namespace Json {
Lexer::Lexer(const std::string& input)
: m_input(input)
Lexer::Lexer(std::shared_ptr<Job> job)
: m_job(job)
{
}
@@ -25,11 +26,11 @@ Lexer::~Lexer()
void Lexer::analyze()
{
printf("---------\n");
printf("Input JSON:\n%s\n", m_input.c_str());
printf("Input JSON:\n%s\n", m_job->input().c_str());
printf("---------\n");
printf("Lexing:\n");
while (m_index < m_input.length()) {
while (m_index < m_job->input().length()) {
switch (peek()) {
case '{':
printf("Pushing -> BraceOpen: \"{\"\t%zu[%zu]\n", m_line, m_column);
@@ -112,18 +113,21 @@ void Lexer::analyze()
m_index++;
m_column++;
}
// FIXME: handle case where the file doenst have a trailing newline
m_job->setLineNumbersWidth(std::to_string(m_line - 1).length());
}
// -----------------------------------------
char Lexer::peek()
{
return m_input[m_index];
return m_job->input()[m_index];
}
char Lexer::peekNext()
{
return m_input[m_index + 1];
return m_job->input()[m_index + 1];
}
char Lexer::consume()