blob: 04c8ec93a3e21904dc9b77bd3d87e21448bbd6d0 [file] [log] [blame] [edit]
(* 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;