|
LLDB mainline
|
Pure recursive descent parser for C++ like expressions. More...
#include <DILParser.h>
Public Member Functions | |
| ~DILParser ()=default | |
Static Public Member Functions | |
| static llvm::Expected< ASTNodeUP > | Parse (llvm::StringRef dil_input_expr, DILLexer lexer, StackFrame &stack_frame, lldb::DynamicValueType use_dynamic, lldb::DILMode mode) |
| Parse the lexed tokens. | |
Private Attributes | |
| StackFrame & | m_stack_frame |
| llvm::StringRef | m_input_expr |
| DILLexer | m_dil_lexer |
| llvm::Error & | m_error |
| lldb::DynamicValueType | m_use_dynamic |
| lldb::DILMode | m_mode |
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 68 of file DILParser.h.
|
default |
References error().
|
explicitprivate |
Definition at line 116 of file DILParser.cpp.
References error(), m_dil_lexer, m_error, m_input_expr, m_mode, m_stack_frame, and m_use_dynamic.
Referenced by Parse().
|
private |
Definition at line 1040 of file DILParser.cpp.
References error(), m_dil_lexer, m_error, and m_input_expr.
Referenced by Expect(), ExpectOneOf(), ParseAndExpression(), ParseMultiplicativeExpression(), ParseNestedNameSpecifier(), ParseNumericLiteral(), ParsePostfixExpression(), ParsePrimaryExpression(), ParseUnaryExpression(), and ResolveTypeDeclarators().
|
inlineprivate |
Definition at line 135 of file DILParser.h.
References m_dil_lexer.
Referenced by Expect(), ExpectOneOf(), ParseAdditiveExpression(), ParseAndExpression(), ParseAssignmentExpression(), ParseBooleanLiteral(), ParseBuiltinType(), ParseCastExpression(), ParseConditionalBranches(), ParseConditionalExpression(), ParseEqualityExpression(), ParseExclusiveOrExpression(), ParseFloatingPointLiteral(), ParseIdExpression(), ParseInclusiveOrExpression(), ParseIntegerLiteral(), ParseLogicalAndExpression(), ParseLogicalOrExpression(), ParseMultiplicativeExpression(), ParseNestedNameSpecifier(), ParseNumericLiteral(), ParsePostfixExpression(), ParsePrimaryExpression(), ParseRelationalExpression(), ParseShiftExpression(), ParseTypeId(), ParseTypeName(), ParseTypeSpecifier(), ParseUnaryExpression(), ParseUnqualifiedId(), and ResolveTypeDeclarators().
|
private |
Definition at line 1116 of file DILParser.cpp.
References BailOut(), CurToken(), lldb_private::dil::Token::equal, lldb_private::dil::Token::minusequal, and lldb_private::dil::Token::plusequal.
Referenced by ParseCastExpression(), ParseConditionalBranches(), ParseIdExpression(), ParseNestedNameSpecifier(), ParsePostfixExpression(), ParsePrimaryExpression(), ParseUnqualifiedId(), and Run().
|
private |
Definition at line 1127 of file DILParser.cpp.
References BailOut(), and CurToken().
Referenced by ParseBooleanLiteral().
|
static |
Parse the lexed tokens.
Definition at line 94 of file DILParser.cpp.
References DILParser(), error(), lldb_private::Expressions, lldb_private::GetLog(), LLDB_LOG, and Run().
Referenced by lldb_private::BreakpointLocation::ConditionSaysStop(), and lldb_private::StackFrame::DILGetValueForVariableExpressionPath().
|
private |
Definition at line 419 of file DILParser.cpp.
References CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, lldb_private::dil::Token::minus, ParseMultiplicativeExpression(), and lldb_private::dil::Token::plus.
Referenced by ParseShiftExpression().
|
private |
Definition at line 319 of file DILParser.cpp.
References lldb_private::dil::Token::amp, BailOut(), CurToken(), lldb::eDILModeFull, lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Token::Is(), m_dil_lexer, m_mode, and ParseEqualityExpression().
Referenced by ParseExclusiveOrExpression().
|
private |
Definition at line 158 of file DILParser.cpp.
References lldb_private::dil::Token::ampequal, lldb_private::dil::Token::caretequal, CurToken(), lldb_private::dil::Token::equal, lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::greatergreaterequal, lldb_private::dil::Token::lesslessequal, m_dil_lexer, lldb_private::dil::Token::minusequal, ParseConditionalBranches(), ParseLogicalOrExpression(), ParsePureExpression(), lldb_private::dil::Token::percentequal, lldb_private::dil::Token::pipeequal, lldb_private::dil::Token::plusequal, lldb_private::dil::Token::question, lldb_private::dil::Token::slashequal, and lldb_private::dil::Token::starequal.
Referenced by ParseExpression().
|
private |
Definition at line 1032 of file DILParser.cpp.
References CurToken(), ExpectOneOf(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::Is(), lldb_private::dil::Token::kw_false, lldb_private::dil::Token::kw_true, and m_dil_lexer.
Referenced by ParsePrimaryExpression().
|
private |
Definition at line 814 of file DILParser.cpp.
References CurToken(), GetKind(), lldb_private::dil::Token::identifier, m_dil_lexer, m_stack_frame, and TentativeParsingRollback().
Referenced by ParseTypeId().
|
private |
Definition at line 470 of file DILParser.cpp.
References CurToken(), lldb_private::dil::eNone, Expect(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::l_paren, m_dil_lexer, ParseCastExpression(), ParseTypeId(), ParseUnaryExpression(), lldb_private::dil::Token::r_paren, and TentativeParsingRollback().
Referenced by ParseCastExpression(), ParseMultiplicativeExpression(), and ParseUnaryExpression().
Definition at line 210 of file DILParser.cpp.
References lldb_private::dil::Token::colon, CurToken(), Expect(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, and ParsePureExpression().
Referenced by ParseAssignmentExpression(), and ParseConditionalExpression().
|
private |
Definition at line 200 of file DILParser.cpp.
References CurToken(), ParseConditionalBranches(), ParseLogicalOrExpression(), and lldb_private::dil::Token::question.
Referenced by ParsePureExpression().
|
private |
Definition at line 347 of file DILParser.cpp.
References CurToken(), lldb_private::dil::Token::equalequal, lldb_private::dil::Token::exclaimequal, lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, and ParseRelationalExpression().
Referenced by ParseAndExpression().
|
private |
Definition at line 297 of file DILParser.cpp.
References lldb_private::dil::Token::caret, CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, and ParseAndExpression().
Referenced by ParseInclusiveOrExpression().
|
private |
Definition at line 137 of file DILParser.cpp.
References ParseAssignmentExpression().
Referenced by Run().
|
private |
Definition at line 1100 of file DILParser.cpp.
References CurToken(), lldb_private::dil::Token::GetLocation(), and lldb_private::dil::Token::GetSpelling().
Referenced by ParseNumericLiteral().
|
private |
Definition at line 940 of file DILParser.cpp.
References lldb_private::dil::Token::coloncolon, CurToken(), Expect(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Token::identifier, m_dil_lexer, ParseNestedNameSpecifier(), and ParseUnqualifiedId().
Referenced by ParsePostfixExpression(), and ParsePrimaryExpression().
|
private |
Definition at line 275 of file DILParser.cpp.
References CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, ParseExclusiveOrExpression(), and lldb_private::dil::Token::pipe.
Referenced by ParseLogicalAndExpression().
|
private |
Definition at line 1075 of file DILParser.cpp.
References CurToken(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Long, lldb_private::dil::LongLong, and lldb_private::dil::None.
Referenced by ParseNumericLiteral().
|
private |
Definition at line 253 of file DILParser.cpp.
References lldb_private::dil::Token::ampamp, CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, and ParseInclusiveOrExpression().
Referenced by ParseLogicalOrExpression().
|
private |
Definition at line 231 of file DILParser.cpp.
References CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), m_dil_lexer, ParseLogicalAndExpression(), and lldb_private::dil::Token::pipepipe.
Referenced by ParseAssignmentExpression(), and ParseConditionalExpression().
|
private |
Definition at line 443 of file DILParser.cpp.
References BailOut(), CurToken(), lldb::eDILModeFull, lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Token::Is(), m_dil_lexer, m_mode, ParseCastExpression(), lldb_private::dil::Token::percent, lldb_private::dil::Token::slash, and lldb_private::dil::Token::star.
Referenced by ParseAdditiveExpression().
|
private |
Definition at line 693 of file DILParser.cpp.
References BailOut(), lldb_private::dil::Token::coloncolon, CurToken(), Expect(), GetKind(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Token::identifier, lldb_private::dil::Token::l_paren, m_dil_lexer, ParseNestedNameSpecifier(), and lldb_private::dil::Token::r_paren.
Referenced by ParseIdExpression(), ParseNestedNameSpecifier(), and ParseTypeSpecifier().
|
private |
Definition at line 1059 of file DILParser.cpp.
References BailOut(), CurToken(), lldb_private::dil::eErrorNode, lldb_private::dil::Token::integer_constant, m_dil_lexer, ParseFloatingPointLiteral(), and ParseIntegerLiteral().
Referenced by ParsePrimaryExpression().
|
private |
Definition at line 578 of file DILParser.cpp.
References lldb_private::dil::Token::arrow, BailOut(), lldb_private::dil::Token::colon, CurToken(), Expect(), GetKind(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::l_square, m_dil_lexer, lldb_private::dil::Token::minus, lldb_private::dil::Token::minusminus, ParseIdExpression(), ParsePrimaryExpression(), ParsePureExpression(), lldb_private::dil::Token::period, lldb_private::dil::Token::plusplus, and lldb_private::dil::Token::r_square.
Referenced by ParseUnaryExpression().
|
private |
Definition at line 642 of file DILParser.cpp.
References BailOut(), lldb_private::dil::Token::coloncolon, CurToken(), Expect(), lldb_private::dil::Token::float_constant, lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::identifier, lldb_private::dil::Token::integer_constant, lldb_private::dil::Token::kw_false, lldb_private::dil::Token::kw_true, lldb_private::dil::Token::l_paren, m_dil_lexer, ParseBooleanLiteral(), ParseIdExpression(), ParseNumericLiteral(), ParsePureExpression(), ParseTypeId(), lldb_private::dil::Token::r_paren, and TentativeParsingRollback().
Referenced by ParsePostfixExpression().
|
private |
Definition at line 190 of file DILParser.cpp.
References ParseConditionalExpression().
Referenced by ParseAssignmentExpression(), ParseConditionalBranches(), ParsePostfixExpression(), and ParsePrimaryExpression().
|
private |
Definition at line 372 of file DILParser.cpp.
References CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::greater, lldb_private::dil::Token::greaterequal, lldb_private::dil::Token::less, lldb_private::dil::Token::lessequal, m_dil_lexer, and ParseShiftExpression().
Referenced by ParseEqualityExpression().
|
private |
Definition at line 396 of file DILParser.cpp.
References CurToken(), lldb_private::dil::GetBinaryOpKindFromToken(), lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::Token::greatergreater, lldb_private::dil::Token::lessless, m_dil_lexer, and ParseAdditiveExpression().
Referenced by ParseRelationalExpression().
|
private |
Definition at line 760 of file DILParser.cpp.
References lldb_private::dil::Token::amp, CurToken(), lldb_private::CompilerType::IsValid(), lldb_private::dil::LookupGlobalIdentifier(), lldb_private::dil::LookupIdentifier(), m_dil_lexer, m_stack_frame, m_use_dynamic, ParseBuiltinType(), ParseTypeSpecifierSeq(), lldb_private::dil::ResolveTypeByName(), ResolveTypeDeclarators(), and lldb_private::dil::Token::star.
Referenced by ParseCastExpression(), and ParsePrimaryExpression().
|
private |
Definition at line 914 of file DILParser.cpp.
References CurToken(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Token::identifier, and m_dil_lexer.
Referenced by ParseTypeSpecifier().
|
private |
Definition at line 866 of file DILParser.cpp.
References lldb_private::dil::Token::coloncolon, CurToken(), m_dil_lexer, ParseNestedNameSpecifier(), and ParseTypeName().
Referenced by ParseTypeSpecifierSeq().
|
private |
Definition at line 850 of file DILParser.cpp.
References ParseTypeSpecifier().
Referenced by ParseTypeId().
|
private |
Definition at line 526 of file DILParser.cpp.
References lldb_private::dil::AddrOf, lldb_private::dil::Token::amp, BailOut(), CurToken(), lldb_private::dil::Deref, lldb_private::dil::Token::exclaim, lldb_private::dil::Token::GetKind(), lldb_private::dil::Token::GetLocation(), lldb_private::dil::LNot, m_dil_lexer, lldb_private::dil::Minus, lldb_private::dil::Token::minus, lldb_private::dil::Token::minusminus, lldb_private::dil::Not, ParseCastExpression(), ParsePostfixExpression(), lldb_private::dil::Plus, lldb_private::dil::Token::plus, lldb_private::dil::Token::plusplus, lldb_private::dil::Token::star, and lldb_private::dil::Token::tilde.
Referenced by ParseCastExpression().
|
private |
Definition at line 985 of file DILParser.cpp.
References CurToken(), Expect(), lldb_private::dil::Token::GetSpelling(), lldb_private::dil::Token::identifier, and m_dil_lexer.
Referenced by ParseIdExpression().
|
private |
Definition at line 993 of file DILParser.cpp.
References lldb_private::dil::Token::amp, BailOut(), CurToken(), lldb_private::CompilerType::GetLValueReferenceType(), lldb_private::CompilerType::GetPointerType(), lldb_private::CompilerType::IsReferenceType(), lldb_private::dil::Token::star, and lldb_private::CompilerType::TypeDescription().
Referenced by ParseTypeId().
|
private |
Definition at line 124 of file DILParser.cpp.
References lldb_private::dil::Token::eof, Expect(), and ParseExpression().
Referenced by Parse().
|
inlineprivate |
Definition at line 129 of file DILParser.h.
References m_dil_lexer, and m_error.
Referenced by ParseBuiltinType(), ParseCastExpression(), and ParsePrimaryExpression().
|
private |
Definition at line 144 of file DILParser.h.
Referenced by BailOut(), CurToken(), DILParser(), ParseAdditiveExpression(), ParseAndExpression(), ParseAssignmentExpression(), ParseBooleanLiteral(), ParseBuiltinType(), ParseCastExpression(), ParseConditionalBranches(), ParseEqualityExpression(), ParseExclusiveOrExpression(), ParseIdExpression(), ParseInclusiveOrExpression(), ParseLogicalAndExpression(), ParseLogicalOrExpression(), ParseMultiplicativeExpression(), ParseNestedNameSpecifier(), ParseNumericLiteral(), ParsePostfixExpression(), ParsePrimaryExpression(), ParseRelationalExpression(), ParseShiftExpression(), ParseTypeId(), ParseTypeName(), ParseTypeSpecifier(), ParseUnaryExpression(), ParseUnqualifiedId(), and TentativeParsingRollback().
|
private |
Definition at line 147 of file DILParser.h.
Referenced by BailOut(), DILParser(), and TentativeParsingRollback().
|
private |
Definition at line 142 of file DILParser.h.
Referenced by BailOut(), and DILParser().
|
private |
Definition at line 152 of file DILParser.h.
Referenced by DILParser(), ParseAndExpression(), and ParseMultiplicativeExpression().
|
private |
Definition at line 140 of file DILParser.h.
Referenced by DILParser(), ParseBuiltinType(), and ParseTypeId().
|
private |
Definition at line 149 of file DILParser.h.
Referenced by DILParser(), and ParseTypeId().