xref: /freebsd/contrib/llvm-project/lldb/docs/dil-expr-lang.ebnf (revision 700637cbb5e582861067a11aaca4d053546871d2)
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