Use AST nodes as Subscript and BitExtraction arguments instead of bare integers. This enables using any supported expression as an array or bit index.
83 lines
2.2 KiB
EBNF
83 lines
2.2 KiB
EBNF
(* Data Inspection Language (DIL) definition - LLDB Debug Expressions *)
|
|
|
|
(* This is currently a subset of the final DIL Language, matching the current
|
|
DIL implementation. *)
|
|
|
|
expression = cast_expression;
|
|
|
|
cast_expression = unary_expression
|
|
| "(" type_id ")" cast_expression;
|
|
|
|
unary_expression = postfix_expression
|
|
| unary_operator cast_expression ;
|
|
|
|
unary_operator = "*" | "&" | "+" | "-";
|
|
|
|
postfix_expression = primary_expression
|
|
| postfix_expression "[" expression "]"
|
|
| postfix_expression "[" expression "-" expression "]"
|
|
| postfix_expression "." id_expression
|
|
| postfix_expression "->" id_expression ;
|
|
|
|
primary_expression = numeric_literal
|
|
| boolean_literal
|
|
| id_expression
|
|
| "(" expression ")" ;
|
|
|
|
id_expression = unqualified_id
|
|
| qualified_id
|
|
| register ;
|
|
|
|
unqualified_id = identifier ;
|
|
|
|
qualified_id = ["::"] [nested_name_specifier] unqualified_id
|
|
| ["::"] identifier ;
|
|
|
|
identifier = ? C99 Identifier ? ;
|
|
|
|
numeric_literal = ? Integer constant: hexademical, decimal, octal, binary ?
|
|
| ? Floating constant ? ;
|
|
|
|
boolean_literal = "true" | "false" ;
|
|
|
|
register = "$" ? Register name ? ;
|
|
|
|
nested_name_specifier = type_name "::"
|
|
| namespace_name '::'
|
|
| nested_name_specifier identifier "::" ;
|
|
|
|
type_id = type_specifier_seq [abstract_declarator] ;
|
|
|
|
type_specifier_seq = type_specifier [type_specifier];
|
|
|
|
type_specifier = ["::"] [nested_name_specifier] type_name
|
|
| builtin_typename ;
|
|
|
|
nested_name_specifier = type_name "::"
|
|
| namespace_name "::"
|
|
| nested_name_specifier identifier "::" ;
|
|
|
|
abstract_declarator = ptr_operator [abstract_declarator] ;
|
|
|
|
ptr_operator = "*"
|
|
| "&";
|
|
|
|
type_name = class_name
|
|
| enum_name
|
|
| typedef_name;
|
|
|
|
builtin_typename = identifier_seq;
|
|
|
|
class_name = identifier ;
|
|
|
|
enum_name = identifier ;
|
|
|
|
typedef_name = identifier ;
|
|
|
|
namespace_name = identifier ;
|
|
|
|
identifier_seq = identifier
|
|
| identifier identifier_seq;
|
|
|
|
|