![]() |
ArkScript
A small, lisp-inspired, functional scripting language
|
#include <BaseParser.hpp>
Public Member Functions | |
BaseParser ()=default | |
Protected Member Functions | |
void | initParser (const std::string &filename, const std::string &code) |
FilePosition | getCursor () const |
CodeErrorContext | generateErrorContextAtCurrentPosition () const |
void | error (const std::string &error, FilePosition start_at, const std::optional< CodeErrorContext > &additional_context=std::nullopt) const |
Create an error context and throw an error containing said context. | |
void | errorWithNextToken (const std::string &message, const std::optional< CodeErrorContext > &additional_context=std::nullopt) |
Fetch the next token (space and paren delimited) to generate an error. | |
void | expectSuffixOrError (char suffix, const std::string &context, const std::optional< CodeErrorContext > &additional_context=std::nullopt) |
Check for a closing char or generate an error. | |
long | getCount () |
std::size_t | getSize () const |
bool | isEOF () const |
void | backtrack (long n) |
Backtrack to a given position (this is NOT an offset!) | |
bool | accept (const CharPred &t, std::string *s=nullptr) |
check if a Character Predicate was able to parse, call next() if matching | |
bool | expect (const CharPred &t, std::string *s=nullptr) |
heck if a Character Predicate was able to parse, call next() if matching ; throw a CodeError if it doesn't match | |
std::string | peek () const |
bool | space (std::string *s=nullptr) |
bool | inlineSpace (std::string *s=nullptr) |
bool | comment (std::string *s=nullptr) |
std::string | spaceComment () |
std::string | newlineOrComment () |
bool | prefix (char c) |
bool | number (std::string *s=nullptr) |
bool | signedNumber (std::string *s=nullptr) |
bool | hexNumber (unsigned length, std::string *s=nullptr) |
bool | name (std::string *s=nullptr) |
bool | sequence (const std::string &s) |
bool | packageName (std::string *s=nullptr) |
bool | anyUntil (const CharPred &delim, std::string *s=nullptr) |
Match any char that do not match the predicate. | |
bool | oneOf (std::initializer_list< std::string > words, std::string *s=nullptr) |
Fetch a token and try to match one of the given words. | |
Protected Attributes | |
std::string | m_filename |
Private Member Functions | |
void | registerNewLine (std::string::iterator it, std::size_t row) |
Register the position of a new line, with an iterator pointing to the new line and the row number. | |
void | next () |
getting next character and changing the values of count/row/col/sym | |
Private Attributes | |
std::string | m_str |
std::vector< std::pair< std::string::iterator, std::size_t > > | m_it_to_row |
A crude map of position to line number to speed up line number computing. | |
std::string::iterator | m_it |
std::string::iterator | m_next_it |
utf8_char_t | m_sym |
The current utf8 character we're on. | |
FilePosition | m_filepos |
The position of the cursor in the file. | |
Definition at line 24 of file BaseParser.hpp.
|
default |
|
protected |
check if a Character Predicate was able to parse, call next() if matching
t | a char predicate to match |
s | optional string to append the matching chars to |
Definition at line 154 of file BaseParser.cpp.
References Ark::internal::utf8_char_t::c_str(), Ark::internal::utf8_char_t::codepoint(), isEOF(), m_sym, and next().
Referenced by anyUntil(), Ark::internal::Parser::block(), comment(), expectSuffixOrError(), Ark::internal::Parser::field(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::functionCall(), hexNumber(), Ark::internal::Parser::import_(), inlineSpace(), Ark::internal::Parser::list(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), name(), Ark::internal::Parser::nil(), number(), packageName(), prefix(), sequence(), signedNumber(), space(), and Ark::internal::Parser::string().
|
protected |
Match any char that do not match the predicate.
delim | delimiter predicate |
s | optional string to append the matching chars to |
Definition at line 330 of file BaseParser.cpp.
References accept().
Referenced by errorWithNextToken().
|
protected |
Backtrack to a given position (this is NOT an offset!)
n | position in the source file (byte number) |
Definition at line 82 of file BaseParser.cpp.
References Ark::internal::utf8_char_t::at(), Ark::internal::FilePosition::col, m_filepos, m_it, m_it_to_row, m_next_it, m_str, m_sym, and Ark::internal::FilePosition::row.
Referenced by Ark::internal::Parser::atom(), Ark::internal::Parser::function(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), Ark::internal::Parser::node(), Ark::internal::Parser::process(), and Ark::internal::Parser::string().
|
protected |
Definition at line 215 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::block(), Ark::internal::Parser::condition(), Ark::internal::Parser::del(), Ark::internal::Parser::function(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::functionCall(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::list(), Ark::internal::Parser::loop(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), Ark::internal::Parser::macroCondition(), newlineOrComment(), Ark::internal::Parser::nil(), Ark::internal::Parser::process(), spaceComment(), and Ark::internal::Parser::wrapped().
|
protected |
Create an error context and throw an error containing said context.
error | an error message |
start_at | position in the file where the parsing for the erroneous token started |
additional_context | optional context created when a node is being parsed |
Definition at line 127 of file BaseParser.cpp.
References Ark::internal::FilePosition::col, error(), getCursor(), m_filename, and Ark::internal::FilePosition::row.
Referenced by error(), errorWithNextToken(), expect(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::import_(), initParser(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::number(), and Ark::internal::Parser::string().
|
protected |
Fetch the next token (space and paren delimited) to generate an error.
message | an error message |
additional_context | optional context created when a node is being parsed |
Definition at line 140 of file BaseParser.cpp.
References anyUntil(), error(), and getCursor().
Referenced by Ark::internal::Parser::condition(), Ark::internal::Parser::del(), expectSuffixOrError(), Ark::internal::Parser::field(), Ark::internal::Parser::function(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::loop(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), Ark::internal::Parser::macroCondition(), Ark::internal::Parser::node(), Ark::internal::Parser::process(), and Ark::internal::Parser::spread().
|
protected |
heck if a Character Predicate was able to parse, call next() if matching ; throw a CodeError if it doesn't match
t | a char predicate to match |
s | optional string to append the matching chars to |
Definition at line 170 of file BaseParser.cpp.
References Ark::internal::utf8_char_t::c_str(), Ark::internal::utf8_char_t::codepoint(), error(), getCursor(), m_sym, Ark::internal::CharPred::name, and next().
Referenced by Ark::internal::Parser::functionArgs().
|
protected |
Check for a closing char or generate an error.
suffix | a suffix char, eg " or ) @param context can be "string", "node" ; represents a structure |
additional_context | optional context created when a node is being parsed |
Definition at line 148 of file BaseParser.cpp.
References accept(), and errorWithNextToken().
Referenced by Ark::internal::Parser::block(), Ark::internal::Parser::functionCall(), Ark::internal::Parser::import_(), Ark::internal::Parser::list(), Ark::internal::Parser::macro(), Ark::internal::Parser::string(), and Ark::internal::Parser::wrapped().
|
nodiscardprotected |
Definition at line 117 of file BaseParser.cpp.
References getCursor(), and m_filename.
Referenced by Ark::internal::Parser::block(), Ark::internal::Parser::functionCall(), Ark::internal::Parser::import_(), Ark::internal::Parser::list(), Ark::internal::Parser::macro(), and Ark::internal::Parser::wrapped().
|
inlineprotected |
Definition at line 88 of file BaseParser.hpp.
Referenced by Ark::internal::Parser::atom(), Ark::internal::Parser::function(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), Ark::internal::Parser::node(), Ark::internal::Parser::process(), and Ark::internal::Parser::string().
|
nodiscardprotected |
Definition at line 112 of file BaseParser.cpp.
References m_filepos.
Referenced by Ark::internal::Parser::atom(), error(), errorWithNextToken(), expect(), Ark::internal::Parser::field(), Ark::internal::Parser::function(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::functionCall(), generateErrorContextAtCurrentPosition(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::macro(), Ark::internal::Parser::node(), Ark::internal::Parser::positioned(), Ark::internal::Parser::positioned(), Ark::internal::Parser::string(), and Ark::internal::Parser::wrapped().
|
inlinenodiscardprotected |
Definition at line 94 of file BaseParser.hpp.
|
protected |
Definition at line 287 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::string().
|
protected |
Definition at line 64 of file BaseParser.cpp.
References error(), m_filename, m_filepos, m_it, m_next_it, m_str, m_sym, and next().
Referenced by Ark::internal::Parser::process().
|
protected |
|
inlinenodiscardprotected |
Definition at line 100 of file BaseParser.hpp.
Referenced by accept(), Ark::internal::Parser::block(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::functionCall(), Ark::internal::Parser::import_(), Ark::internal::Parser::list(), Ark::internal::Parser::macroArgs(), newlineOrComment(), next(), Ark::internal::Parser::process(), spaceComment(), and Ark::internal::Parser::string().
|
protected |
Definition at line 298 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::del(), Ark::internal::Parser::field(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), oneOf(), Ark::internal::Parser::spread(), Ark::internal::Parser::symbol(), and Ark::internal::Parser::wrapped().
|
nodiscardprotected |
Definition at line 238 of file BaseParser.cpp.
References comment(), isEOF(), and space().
Referenced by Ark::internal::Parser::block(), Ark::internal::Parser::condition(), Ark::internal::Parser::del(), Ark::internal::Parser::function(), Ark::internal::Parser::functionArgs(), Ark::internal::Parser::functionCall(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::list(), Ark::internal::Parser::loop(), Ark::internal::Parser::macro(), Ark::internal::Parser::macroArgs(), Ark::internal::Parser::macroCondition(), Ark::internal::Parser::nil(), Ark::internal::Parser::process(), and Ark::internal::Parser::wrapped().
|
private |
getting next character and changing the values of count/row/col/sym
Definition at line 40 of file BaseParser.cpp.
References Ark::internal::utf8_char_t::at(), Ark::internal::FilePosition::col, isEOF(), Ark::internal::utf8_char_t::isPrintable(), m_filepos, m_it, m_next_it, m_str, m_sym, registerNewLine(), Ark::internal::FilePosition::row, and Ark::internal::utf8_char_t::size().
Referenced by accept(), expect(), and initParser().
|
protected |
|
protected |
Fetch a token and try to match one of the given words.
words | list of words to match against |
s | optional string to append the matching chars to |
Definition at line 341 of file BaseParser.cpp.
References name().
Referenced by Ark::internal::Parser::block(), Ark::internal::Parser::condition(), Ark::internal::Parser::del(), Ark::internal::Parser::function(), Ark::internal::Parser::import_(), Ark::internal::Parser::letMutSet(), Ark::internal::Parser::loop(), Ark::internal::Parser::macro(), and Ark::internal::Parser::macroCondition().
|
protected |
Definition at line 319 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::import_().
|
nodiscardprotected |
Definition at line 182 of file BaseParser.cpp.
References Ark::internal::utf8_char_t::c_str(), and m_sym.
Referenced by Ark::internal::Parser::process().
|
protected |
Definition at line 249 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::wrapped().
|
private |
Register the position of a new line, with an iterator pointing to the new line and the row number.
it | |
row |
Definition at line 11 of file BaseParser.cpp.
References m_it_to_row, and m_str.
Referenced by next().
|
protected |
Definition at line 312 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::macroArgs(), and Ark::internal::Parser::spread().
|
protected |
Definition at line 269 of file BaseParser.cpp.
References accept(), Ark::internal::IsMinus, and number().
Referenced by Ark::internal::Parser::number().
|
protected |
Definition at line 187 of file BaseParser.cpp.
References accept().
Referenced by Ark::internal::Parser::import_(), and newlineOrComment().
|
nodiscardprotected |
Definition at line 227 of file BaseParser.cpp.
References comment(), inlineSpace(), and isEOF().
Referenced by Ark::internal::Parser::process(), and Ark::internal::Parser::wrapped().
|
protected |
Definition at line 50 of file BaseParser.hpp.
Referenced by error(), generateErrorContextAtCurrentPosition(), initParser(), Ark::internal::Parser::positioned(), and Ark::internal::Parser::positioned().
|
private |
The position of the cursor in the file.
Definition at line 34 of file BaseParser.hpp.
Referenced by backtrack(), getCursor(), initParser(), and next().
|
private |
Definition at line 32 of file BaseParser.hpp.
Referenced by backtrack(), initParser(), and next().
|
private |
A crude map of
position to line number to speed up line number computing.
Definition at line 31 of file BaseParser.hpp.
Referenced by backtrack(), and registerNewLine().
|
private |
Definition at line 32 of file BaseParser.hpp.
Referenced by backtrack(), initParser(), and next().
|
private |
Definition at line 30 of file BaseParser.hpp.
Referenced by backtrack(), initParser(), next(), and registerNewLine().
|
private |
The current utf8 character we're on.
Definition at line 33 of file BaseParser.hpp.
Referenced by accept(), backtrack(), expect(), initParser(), next(), and peek().