1 /* Bison code properties structure and scanner. 
   3    Copyright (C) 2006-2007, 2009-2010 Free Software Foundation, Inc. 
   5    This file is part of Bison, the GNU Compiler Compiler. 
   7    This program is free software: you can redistribute it and/or modify 
   8    it under the terms of the GNU General Public License as published by 
   9    the Free Software Foundation, either version 3 of the License, or 
  10    (at your option) any later version. 
  12    This program is distributed in the hope that it will be useful, 
  13    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  15    GNU General Public License for more details. 
  17    You should have received a copy of the GNU General Public License 
  18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
  23 # include "location.h" 
  24 # include "named-ref.h" 
  29  * Keeps track of the maximum number of semantic values to the left of a handle 
  30  * (those referenced by $0, $-1, etc.) that are required by the semantic 
  31  * actions of this grammar. 
  33 extern int max_left_semantic_context
; 
  36  * A code passage captured from the grammar file and possibly translated, 
  37  * and/or properties associated with such a code passage.  Don't break 
  38  * encapsulation by modifying the fields directly.  Use the provided interface 
  41 typedef struct code_props 
{ 
  42   /** Set by the init functions.  */ 
  44     CODE_PROPS_NONE
, CODE_PROPS_PLAIN
, 
  45     CODE_PROPS_SYMBOL_ACTION
, CODE_PROPS_RULE_ACTION
 
  48   /** \c NULL iff \c code_props::kind is \c CODE_PROPS_NONE.  */ 
  50   /** Undefined iff \c code_props::code is \c NULL.  */ 
  54    * \c false iff either: 
  55    *   - \c code_props_translate_code has never previously been invoked for 
  56    *     the \c code_props that would contain the code passage associated 
  57    *     with \c self.  (That \c code_props is not the same as this one if this 
  58    *     one is for a RHS \c symbol_list node.  Instead, it's the \c code_props 
  59    *     for the LHS symbol of the same rule.) 
  60    *   - \c code_props_translate_code has been invoked for that \c code_props, 
  61    *     but the symbol value associated with this \c code_props was not 
  62    *     referenced in the code passage. 
  66   /** \c NULL iff \c code_props::kind is not \c CODE_PROPS_RULE_ACTION.  */ 
  67   struct symbol_list 
*rule
; 
  69   /* Named reference. */ 
  75  *   - <tt>self != NULL</tt>. 
  77  *   - \c self has been overwritten to contain no code. 
  79 void code_props_none_init (code_props 
*self
); 
  81 /** Equivalent to \c code_props_none_init.  */ 
  82 #define CODE_PROPS_NONE_INIT \ 
  83   {CODE_PROPS_NONE, NULL, EMPTY_LOCATION_INIT, false, NULL, NULL} 
  85 /** Initialized by \c CODE_PROPS_NONE_INIT with no further modification.  */ 
  86 extern code_props 
const code_props_none
; 
  90  *   - <tt>self != NULL</tt>. 
  91  *   - <tt>code != NULL</tt>. 
  92  *   - \c code is an untranslated code passage containing no Bison escapes. 
  93  *   - \c code was extracted from the grammar file at \c code_loc. 
  95  *   - \c self has been overwritten to represent the specified plain code 
  97  *   - \c self will become invalid if the caller frees \c code before invoking 
  98  *     \c code_props_translate_code on \c self. 
 100 void code_props_plain_init (code_props 
*self
, char const *code
, 
 105  *   - <tt>self != NULL</tt>. 
 106  *   - <tt>code != NULL</tt>. 
 107  *   - \c code is an untranslated code passage.  The only Bison escapes it 
 108  *     might contain are $$ and \@$, referring to a single symbol. 
 109  *   - \c code was extracted from the grammar file at \c code_loc. 
 111  *   - \c self has been overwritten to represent the specified symbol action. 
 112  *   - \c self will become invalid if the caller frees \c code before invoking 
 113  *     \c code_props_translate_code on \c self. 
 115 void code_props_symbol_action_init (code_props 
*self
, char const *code
, 
 120  *   - <tt>self != NULL</tt>. 
 121  *   - <tt>code != NULL</tt>. 
 122  *   - <tt>rule != NULL</tt>. 
 123  *   - \c code is the untranslated action of the rule for which \c rule is the 
 124  *     LHS node.  Thus, \c code possibly contains Bison escapes such as $$, $1, 
 125  *     $2, etc referring to the values of the rule. 
 126  *   - \c code was extracted from the grammar file at \c code_loc. 
 128  *   - \c self has been overwritten to represent the specified rule action. 
 129  *   - \c self does not claim responsibility for the memory of \c rule. 
 130  *   - \c self will become invalid if: 
 131  *     - The caller frees \c code before invoking \c code_props_translate_code 
 133  *     - The caller frees \c rule. 
 135 void code_props_rule_action_init (code_props 
*self
, char const *code
, 
 136                                   location code_loc
, struct symbol_list 
*rule
, 
 141  *   - If there's a code passage contained in \c self and it contains Bison 
 142  *     escapes, all grammar declarations have already been parsed as they may 
 143  *     affect warnings and complaints issued here. 
 145  *   - All M4-special symbols and Bison escapes have been translated in 
 147  *   - <tt>self->code != self->code\@pre</tt> unless 
 148  *     <tt>self->code\@pre = NULL</tt>. 
 150 void code_props_translate_code (code_props 
*self
); 
 156  *   - The dynamic memory allocated by the previous invocation of 
 157  *     \c code_props_translate_code (if any) was freed.  The \c code_props 
 158  *     instance for which \c code_props_translate_code was invoked is now 
 161 void code_scanner_last_string_free (void); 
 167  *   - All dynamic memory allocated during invocations of 
 168  *     \c code_props_translate_code (if any) has been freed.  All \c code_props 
 169  *     instances may now be invalid. 
 171 void code_scanner_free (void); 
 173 #endif /* !SCAN_CODE_H_ */