LLDB mainline
lldb_private::dil::DILParser Class Reference

Pure recursive descent parser for C++ like expressions. More...

#include <DILParser.h>

Public Member Functions

 ~DILParser ()=default

Static Public Member Functions

static llvm::Expected< ASTNodeUPParse (llvm::StringRef dil_input_expr, DILLexer lexer, std::shared_ptr< StackFrame > frame_sp, lldb::DynamicValueType use_dynamic, lldb::DILMode mode)

Private Member Functions

 DILParser (llvm::StringRef dil_input_expr, DILLexer lexer, std::shared_ptr< StackFrame > frame_sp, lldb::DynamicValueType use_dynamic, llvm::Error &error, lldb::DILMode mode)
ASTNodeUP Run ()
ASTNodeUP ParseExpression ()
ASTNodeUP ParseAdditiveExpression ()
ASTNodeUP ParseMultiplicativeExpression ()
ASTNodeUP ParseUnaryExpression ()
ASTNodeUP ParsePostfixExpression ()
ASTNodeUP ParsePrimaryExpression ()
std::string ParseNestedNameSpecifier ()
std::string ParseIdExpression ()
std::string ParseUnqualifiedId ()
ASTNodeUP ParseNumericLiteral ()
ASTNodeUP ParseIntegerLiteral ()
ASTNodeUP ParseFloatingPointLiteral ()
ASTNodeUP ParseBooleanLiteral ()
ASTNodeUP ParseCastExpression ()
std::optional< CompilerTypeParseBuiltinType ()
std::optional< CompilerTypeParseTypeId ()
void ParseTypeSpecifierSeq (std::string &type_name)
std::optional< std::string > ParseTypeSpecifier ()
std::optional< std::string > ParseTypeName ()
CompilerType ResolveTypeDeclarators (CompilerType type, const std::vector< Token > &ptr_operators)
void BailOut (const std::string &error, uint32_t loc, uint16_t err_len)
void Expect (Token::Kind kind)
void ExpectOneOf (std::vector< Token::Kind > kinds_vec)
void TentativeParsingRollback (uint32_t saved_idx)
Token CurToken ()

Private Attributes

std::shared_ptr< StackFramem_ctx_scope
llvm::StringRef m_input_expr
DILLexer m_dil_lexer
llvm::Error & m_error
lldb::DynamicValueType m_use_dynamic
lldb::DILMode m_mode

Detailed Description

Pure recursive descent parser for C++ like expressions.

EBNF grammar for the parser is described in lldb/docs/dil-expr-lang.ebnf

Definition at line 65 of file DILParser.h.

Constructor & Destructor Documentation

◆ ~DILParser()

lldb_private::dil::DILParser::~DILParser ( )
default

References error().

◆ DILParser()

lldb_private::dil::DILParser::DILParser ( llvm::StringRef dil_input_expr,
DILLexer lexer,
std::shared_ptr< StackFrame > frame_sp,
lldb::DynamicValueType use_dynamic,
llvm::Error & error,
lldb::DILMode mode )
explicitprivate

Definition at line 110 of file DILParser.cpp.

References error(), m_ctx_scope, m_dil_lexer, m_error, m_input_expr, m_mode, and m_use_dynamic.

Referenced by Parse().

Member Function Documentation

◆ BailOut()

void lldb_private::dil::DILParser::BailOut ( const std::string & error,
uint32_t loc,
uint16_t err_len )
private

◆ CurToken()

◆ Expect()

void lldb_private::dil::DILParser::Expect ( Token::Kind kind)
private

◆ ExpectOneOf()

void lldb_private::dil::DILParser::ExpectOneOf ( std::vector< Token::Kind > kinds_vec)
private

Definition at line 798 of file DILParser.cpp.

References BailOut(), and CurToken().

Referenced by ParseBooleanLiteral().

◆ Parse()

llvm::Expected< ASTNodeUP > lldb_private::dil::DILParser::Parse ( llvm::StringRef dil_input_expr,
DILLexer lexer,
std::shared_ptr< StackFrame > frame_sp,
lldb::DynamicValueType use_dynamic,
lldb::DILMode mode )
static

Definition at line 93 of file DILParser.cpp.

References DILParser(), error(), and Run().

Referenced by lldb_private::StackFrame::DILGetValueForVariableExpressionPath().

◆ ParseAdditiveExpression()

◆ ParseBooleanLiteral()

◆ ParseBuiltinType()

std::optional< CompilerType > lldb_private::dil::DILParser::ParseBuiltinType ( )
private

◆ ParseCastExpression()

◆ ParseExpression()

ASTNodeUP lldb_private::dil::DILParser::ParseExpression ( )
private

Definition at line 131 of file DILParser.cpp.

References ParseAdditiveExpression().

Referenced by ParsePostfixExpression(), ParsePrimaryExpression(), and Run().

◆ ParseFloatingPointLiteral()

ASTNodeUP lldb_private::dil::DILParser::ParseFloatingPointLiteral ( )
private

◆ ParseIdExpression()

◆ ParseIntegerLiteral()

◆ ParseMultiplicativeExpression()

◆ ParseNestedNameSpecifier()

◆ ParseNumericLiteral()

ASTNodeUP lldb_private::dil::DILParser::ParseNumericLiteral ( )
private

◆ ParsePostfixExpression()

◆ ParsePrimaryExpression()

◆ ParseTypeId()

◆ ParseTypeName()

std::optional< std::string > lldb_private::dil::DILParser::ParseTypeName ( )
private

◆ ParseTypeSpecifier()

std::optional< std::string > lldb_private::dil::DILParser::ParseTypeSpecifier ( )
private

◆ ParseTypeSpecifierSeq()

void lldb_private::dil::DILParser::ParseTypeSpecifierSeq ( std::string & type_name)
private

Definition at line 525 of file DILParser.cpp.

References ParseTypeSpecifier().

Referenced by ParseTypeId().

◆ ParseUnaryExpression()

◆ ParseUnqualifiedId()

std::string lldb_private::dil::DILParser::ParseUnqualifiedId ( )
private

◆ ResolveTypeDeclarators()

◆ Run()

ASTNodeUP lldb_private::dil::DILParser::Run ( )
private

Definition at line 118 of file DILParser.cpp.

References lldb_private::dil::Token::eof, Expect(), and ParseExpression().

Referenced by Parse().

◆ TentativeParsingRollback()

void lldb_private::dil::DILParser::TentativeParsingRollback ( uint32_t saved_idx)
inlineprivate

Definition at line 114 of file DILParser.h.

References m_dil_lexer, and m_error.

Referenced by ParseBuiltinType(), and ParseCastExpression().

Member Data Documentation

◆ m_ctx_scope

std::shared_ptr<StackFrame> lldb_private::dil::DILParser::m_ctx_scope
private

Definition at line 125 of file DILParser.h.

Referenced by DILParser(), ParseBuiltinType(), and ParseTypeId().

◆ m_dil_lexer

◆ m_error

llvm::Error& lldb_private::dil::DILParser::m_error
private

Definition at line 132 of file DILParser.h.

Referenced by BailOut(), DILParser(), and TentativeParsingRollback().

◆ m_input_expr

llvm::StringRef lldb_private::dil::DILParser::m_input_expr
private

Definition at line 127 of file DILParser.h.

Referenced by BailOut(), and DILParser().

◆ m_mode

lldb::DILMode lldb_private::dil::DILParser::m_mode
private

Definition at line 137 of file DILParser.h.

Referenced by DILParser(), and ParseMultiplicativeExpression().

◆ m_use_dynamic

lldb::DynamicValueType lldb_private::dil::DILParser::m_use_dynamic
private

Definition at line 134 of file DILParser.h.

Referenced by DILParser(), and ParseTypeId().


The documentation for this class was generated from the following files: