#include "tools/cddl/parse.h"
#include <unistd.h>
#include <algorithm>
#include <iostream>
#include <memory>
#include <sstream>
#include <utility>
#include <vector>
#include "absl/strings/ascii.h"
#include "absl/strings/match.h"
#include "tools/cddl/logging.h"
static_assert …;
struct Parser { … };
AstNode* AddNode(Parser* p,
AstNode::Type type,
std::string_view text,
AstNode* children = nullptr) { … }
bool IsBinaryDigit(char x) { … }
bool IsExtendedAlpha(char x) { … }
bool IsNewline(char x) { … }
bool IsWhitespaceOrSemicolon(char c) { … }
std::string_view SkipNewline(std::string_view view) { … }
std::optional<std::string> ParseTypeKeyFromComment(Parser* p);
std::string_view SkipComment(std::string_view view, bool skip_type_key = true) { … }
void SkipWhitespaceImpl(Parser* p, bool skip_type_key = true) { … }
void SkipWhitespace(Parser* p, bool skip_comments = true) { … }
void SkipStartWhitespace(Parser* p) { … }
bool TrySkipNewline(Parser* p) { … }
bool TrySkipCharacter(Parser* p, char c) { … }
enum class AssignType { … };
AssignType ParseAssignmentType(Parser* p) { … }
AstNode* ParseType1(Parser* p);
AstNode* ParseType(Parser* p, bool skip_comments = true);
AstNode* ParseId(Parser* p);
void SkipUint(Parser* p) { … }
AstNode* ParseNumber(Parser* p) { … }
AstNode* ParseText(Parser* p) { … }
AstNode* ParseBytes(Parser* p) { … }
bool IsValue(char c) { … }
AstNode* ParseValue(Parser* p) { … }
AstNode* ParseOccur(Parser* p) { … }
std::optional<std::string> ParseTypeKeyFromComment(Parser* p) { … }
AstNode* ParseMemberKeyFromComment(Parser* p) { … }
AstNode* ParseMemberKey1(Parser* p) { … }
AstNode* ParseMemberKey2(Parser* p) { … }
AstNode* ParseMemberKey3(Parser* p) { … }
AstNode* ParseMemberKey(Parser* p) { … }
AstNode* ParseGroupEntry(Parser* p);
bool SkipOptionalComma(Parser* p) { … }
AstNode* ParseGroupChoice(Parser* p) { … }
AstNode* ParseGroup(Parser* p) { … }
AstNode* ParseRangeop(Parser* p) { … }
AstNode* ParseCtlop(Parser* p) { … }
AstNode* ParseType2(Parser* p) { … }
AstNode* ParseType1(Parser* p) { … }
AstNode* ParseType(Parser* p, bool skip_comments) { … }
AstNode* ParseId(Parser* p) { … }
AstNode* UpdateNodesForGroupEntry(Parser* p,
Parser* p_speculative,
AstNode* occur,
AstNode* member_key,
AstNode* type) { … }
AstNode* ParseGroupEntryWithNameInComment(Parser* p) { … }
AstNode* ParseGroupEntryWithNameAsId(Parser* p) { … }
AstNode* ParseGroupEntryWithGroupReference(Parser* p) { … }
AstNode* ParseGroupEntryWithInlineGroupDefinition(Parser* p) { … }
AstNode* ParseGroupEntry(Parser* p) { … }
AstNode* ParseRule(Parser* p) { … }
ParseResult ParseCddl(std::string_view data) { … }
void DumpAst(AstNode* node, int indent_level) { … }