mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 14:47:46 +00:00
LibGLSL: Add initial GLSL parser implementation
This commit is contained in:
parent
0b6424d883
commit
29972876e4
11 changed files with 4093 additions and 0 deletions
46
Userland/Libraries/LibGLSL/Lexer.h
Normal file
46
Userland/Libraries/LibGLSL/Lexer.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibGLSL/Token.h>
|
||||
|
||||
namespace GLSL {
|
||||
|
||||
class Lexer {
|
||||
public:
|
||||
explicit Lexer(StringView, size_t start_line = 0);
|
||||
|
||||
Vector<Token> lex();
|
||||
template<typename Callback>
|
||||
void lex_iterable(Callback);
|
||||
|
||||
void set_ignore_whitespace(bool value) { m_options.ignore_whitespace = value; }
|
||||
|
||||
private:
|
||||
char peek(size_t offset = 0) const;
|
||||
char consume();
|
||||
void lex_impl(Function<void(Token)>);
|
||||
|
||||
StringView m_input;
|
||||
size_t m_index { 0 };
|
||||
Position m_previous_position { 0, 0 };
|
||||
Position m_position { 0, 0 };
|
||||
|
||||
struct Options {
|
||||
bool ignore_whitespace { false };
|
||||
} m_options;
|
||||
};
|
||||
|
||||
template<typename Callback>
|
||||
void Lexer::lex_iterable(Callback callback)
|
||||
{
|
||||
return lex_impl(move(callback));
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue