blob: 40c678c25cda5eda33c54d897f66c31a81f9a353 [file] [log] [blame] [edit]
(* LLDB Debug Expressions, a subset of C++ *)
(* Insired by https://www.nongnu.org/hcb *)
expression = assignment_expression ;
assignment_expression = conditional_expression
logical_or_expression assignment_operator assignment_expression ;
assignment_operator = "="
| "*="
| "/="
| "%="
| "+="
| "-="
| ">>="
| "<<="
| "&="
| "^="
| "|=" ;
conditional_expression = logical_or_expression
| logical_or_expression "?" expression ":" assignment_expression ;
logical_or_expression = logical_and_expression {"||" logical_and_expression} ;
logical_and_expression = inclusive_or_expression {"&&" inclusive_or_expression} ;
inclusive_or_expression = exclusive_or_expression {"|" exclusive_or_expression} ;
exclusive_or_expression = and_expression {"^" and_expression} ;
and_expression = equality_expression {"&" equality_expression} ;
equality_expression = relational_expression {"==" relational_expression}
| relational_expression {"!=" relational_expression} ;
relational_expression = shift_expression {"<" shift_expression}
| shift_expression {">" shift_expression}
| shift_expression {"<=" shift_expression}
| shift_expression {">=" shift_expression} ;
shift_expression = additive_expression {"<<" additive_expression}
| additive_expression {">>" additive_expression} ;
additive_expression = multiplicative_expression {"+" multiplicative_expression}
| multiplicative_expression {"-" multiplicative_expression} ;
multiplicative_expression = cast_expression {"*" cast_expression}
| cast_expression {"/" cast_expression}
| cast_expression {"%" cast_expression} ;
cast_expression = unary_expression
| "(" type_id ")" cast_expression ;
unary_expression = postfix_expression
| "++" cast_expression
| "--" cast_expression
| unary_operator cast_expression
| "sizeof" unary_expression
| "sizeof" "(" type_id ")" ;
unary_operator = "*" | "&" | "+" | "-" | "!" | "~" ;
postfix_expression = primary_expression
| postfix_expression "[" expression "]"
| postfix_expression "." id_expression
| postfix_expression "->" id_expression
| postfix_expression "++"
| postfix_expression "--"
| static_cast "<" type_id ">" "(" expression ")" ;
| dynamic_cast "<" type_id ">" "(" expression ")" ;
| reinterpret_cast "<" type_id ">" "(" expression ")" ;
primary_expression = numeric_literal
| boolean_literal
| pointer_literal
| id_expression
| "this"
| "(" expression ")"
| builtin_func ;
type_id = type_specifier_seq [abstract_declarator] ;
type_specifier_seq = type_specifier [type_specifier_seq] ;
type_specifier = simple_type_specifier
| cv_qualifier ;
simple_type_specifier = ["::"] [nested_name_specifier] type_name
| "char"
| "char16_t"
| "char32_t"
| "wchar_t"
| "bool"
| "short"
| "int"
| "long"
| "signed"
| "unsigned"
| "float"
| "double"
| "void" ;
nested_name_specifier = type_name "::"
| namespace_name '::'
| nested_name_specifier identifier "::"
| nested_name_specifier simple_template_id "::"
type_name = class_name
| enum_name
| typedef_name
| simple_template_id ;
class_name = identifier ;
enum_name = identifier ;
typedef_name = identifier ;
simple_template_id = template_name "<" [template_argument_list] ">" ;
template_name = identifier ;
template_argument_list = template_argument
| template_argument_list "," template_argument ;
template_argument = type_id
| numeric_literal
| id_expression ;
namespace_name = identifier ;
cv_qualifier = "const" | "volatile" ;
cv_qualifier_seq = cv_qualifier [cv_qualifier_seq] ;
abstract_declarator = ptr_operator [abstract_declarator] ;
ptr_operator = "*" [cv_qualifier_seq]
| "&" ;
id_expression = unqualified_id
| qualified_id ;
unqualified_id = identifier ;
qualified_id = ["::"] [nested_name_specifier] unqualified_id
| ["::"] identifier ;
identifier = ? clang::tok::identifier ? ;
numeric_literal = ? clang::tok::numeric_constant ? ;
boolean_literal = "true" | "false" ;
pointer_literal = "nullptr" ;
builtin_func = builtin_func_name "(" [builtin_func_argument_list] ")" ;
builtin_func_name = "__log2" ;
builtin_func_argument_list = builtin_func_argument
| builtin_func_argument_list "," builtin_func_argument
builtin_func_argument = expression ;