+/**
+ * \pre
+ * - <tt>self != NULL</tt>.
+ * - <tt>code != NULL</tt>.
+ * - <tt>rule != NULL</tt>.
+ * - \c code is the untranslated action of the rule for which \c rule is the
+ * LHS node. Thus, \c code possibly contains Bison escapes such as \c $$,
+ * \c $1, \c $2, etc referring to the values of the rule.
+ * \post
+ * - \c self has been overwritten to represent the specified rule action.
+ * - \c self does not claim responsibility for the memory of \c code or
+ * \c rule.
+ */
+void code_props_rule_action_init (code_props *self, char const *code,
+ location code_loc, struct symbol_list *rule);
+
+/**
+ * \pre
+ * - If there's a code passage contained in \c self and it contains Bison
+ * escapes, all grammar declarations have already been parsed as they may
+ * affect warnings and complaints issued here.
+ * \post
+ * - All M4 special symbols and Bison escapes have been translated in
+ * <tt>code_props_code_get (*self)</tt> iff
+ * <tt>code_props_code_get (*self \@pre) != NULL</tt>.
+ */
+void code_props_translate_code (code_props *self);
+
+/**
+ * \pre
+ * - None.
+ * \post
+ * - \c result = either:
+ * - The code passage contained with \c self.
+ * - \c NULL if none.
+ */
+char const *code_props_code_get (code_props const self);
+
+/**
+ * \pre
+ * - <tt>code_props_code_get (self) != NULL</tt>.
+ * \post
+ * - \c result = the grammar file location of
+ * <tt>code_props_code_get (self)</tt>.
+ */
+location code_props_location_get (code_props const self);
+
+/**
+ * \pre
+ * - \c self was not previously initialized with \c code_props_plain_init.
+ * \post
+ * - \c result = either:
+ * - \c false if either:
+ * - \c code_props_translate_code has never previously been invoked for
+ * the \c code_props that would contain the code passage associated
+ * with \c self. (If \c self is for a RHS \c symbol_list node, that
+ * \c code_props is not \c self. Instead, it's the \c code_props for
+ * the LHS symbol of the same rule.)
+ * - \c code_props_translate_code has been invoked for that
+ * \c code_props, but the symbol value associated with \c self was not
+ * referenced in the code passage.
+ * - \c true otherwise.
+ */
+bool code_props_is_value_used (code_props const self);
+
+/**
+ * \pre
+ * - None.
+ * \post
+ * - The dynamic memory allocated by the previous invocation of
+ * \c code_props_translate_code (if any) was freed. The \c code_props
+ * instance for which that \c code_props_translate_code was invoked is now
+ * invalid.
+ */
+void code_scanner_last_string_free (void);
+
+/**
+ * \pre
+ * - None.
+ * \post
+ * - All dynamic memory allocated during invocations of
+ * \c code_props_translate_code (if any) has been freed. All
+ * \c code_props instances and all pointers returned by
+ * \c code_props_code_get may now be invalid.
+ */
+void code_scanner_free (void);