1*700637cbSDimitry Andric(* Data Inspection Language (DIL) definition - LLDB Debug Expressions *) 2*700637cbSDimitry Andric 3*700637cbSDimitry Andric(* This is currently a subset of the final DIL Language, matching the current 4*700637cbSDimitry Andric DIL implementation. *) 5*700637cbSDimitry Andric 6*700637cbSDimitry Andricexpression = unary_expression ; 7*700637cbSDimitry Andric 8*700637cbSDimitry Andricunary_expression = postfix_expression 9*700637cbSDimitry Andric | unary_operator expression ; 10*700637cbSDimitry Andric 11*700637cbSDimitry Andricunary_operator = "*" | "&" ; 12*700637cbSDimitry Andric 13*700637cbSDimitry Andricpostfix_expression = primary_expression 14*700637cbSDimitry Andric | postfix_expression "[" integer_literal "]" 15*700637cbSDimitry Andric | postfix_expression "." id_expression 16*700637cbSDimitry Andric | postfix_expression "->" id_expression ; 17*700637cbSDimitry Andric 18*700637cbSDimitry Andricprimary_expression = id_expression 19*700637cbSDimitry Andric | "(" expression ")" ; 20*700637cbSDimitry Andric 21*700637cbSDimitry Andricid_expression = unqualified_id 22*700637cbSDimitry Andric | qualified_id 23*700637cbSDimitry Andric | register ; 24*700637cbSDimitry Andric 25*700637cbSDimitry Andricunqualified_id = identifier ; 26*700637cbSDimitry Andric 27*700637cbSDimitry Andricqualified_id = ["::"] [nested_name_specifier] unqualified_id 28*700637cbSDimitry Andric | ["::"] identifier ; 29*700637cbSDimitry Andric 30*700637cbSDimitry Andricidentifier = ? C99 Identifier ? ; 31*700637cbSDimitry Andric 32*700637cbSDimitry Andricinteger_literal = ? Integer constant: hexademical, decimal, octal, binary ? ; 33*700637cbSDimitry Andric 34*700637cbSDimitry Andricregister = "$" ? Register name ? ; 35*700637cbSDimitry Andric 36*700637cbSDimitry Andricnested_name_specifier = type_name "::" 37*700637cbSDimitry Andric | namespace_name '::' 38*700637cbSDimitry Andric | nested_name_specifier identifier "::" ; 39*700637cbSDimitry Andric 40*700637cbSDimitry Andrictype_name = class_name 41*700637cbSDimitry Andric | enum_name 42*700637cbSDimitry Andric | typedef_name; 43*700637cbSDimitry Andric 44*700637cbSDimitry Andricclass_name = identifier ; 45*700637cbSDimitry Andric 46*700637cbSDimitry Andricenum_name = identifier ; 47*700637cbSDimitry Andric 48*700637cbSDimitry Andrictypedef_name = identifier ; 49*700637cbSDimitry Andric 50*700637cbSDimitry Andricnamespace_name = identifier ; 51*700637cbSDimitry Andric 52*700637cbSDimitry Andric 53*700637cbSDimitry Andric 54*700637cbSDimitry Andric 55