(lex): Use it.
* src/reader.c (copy_dollar): Likewise.
+2000-10-16 Akim Demaille <akim@epita.fr>
+
+ * src/lex.c (read_typename): New function.
+ (lex): Use it.
+ * src/reader.c (copy_dollar): Likewise.
+
+
2000-10-16 Akim Demaille <akim@epita.fr>
* src/reader.c (copy_comment2): Expect the input stream to be on
unlexed_symval = symval;
}
+/*-----------------------------------------------------------------.
+| We just read `<' from FIN. Store in TOKEN_BUFFER, the type name |
+| specified between the `<...>'. |
+`-----------------------------------------------------------------*/
+
+void
+read_type_name (FILE *fin)
+{
+ char *p = token_buffer;
+ int c = getc (fin);
+
+ while (c != '>')
+ {
+ if (c == EOF)
+ fatal (_("unterminated type name at end of file"));
+ if (c == '\n')
+ {
+ complain (_("unterminated type name"));
+ ungetc (c, fin);
+ break;
+ }
+
+ if (p == token_buffer + maxtoken)
+ p = grow_token_buffer (p);
+
+ *p++ = c;
+ c = getc (fin);
+ }
+ *p = 0;
+}
+
int
lex (void)
}
case '<':
- p = token_buffer;
- c = getc (finput);
- while (c != '>')
- {
- if (c == EOF)
- fatal (_("unterminated type name at end of file"));
- if (c == '\n')
- {
- complain (_("unterminated type name"));
- ungetc (c, finput);
- break;
- }
-
- if (p == token_buffer + maxtoken)
- p = grow_token_buffer (p);
-
- *p++ = c;
- c = getc (finput);
- }
- *p = 0;
+ read_type_name (finput);
return TYPENAME;
-
case '%':
return parse_percent_token ();
void init_lex PARAMS ((void));
int skip_white_space PARAMS ((void));
void unlex PARAMS ((int));
+void read_type_name PARAMS ((FILE *fin));
/* Return one of the token-type codes. When an identifier is seen,
the code IDENTIFIER is returned and the name is looked up in the
int c = getc (fin);
char *type_name = NULL;
- /* Get the typename if explicit. */
+ /* Get the type name if explicit. */
if (c == '<')
{
- char *cp = token_buffer;
-
- while ((c = getc (fin)) != '>' && c > 0)
- {
- if (cp == token_buffer + maxtoken)
- cp = grow_token_buffer (cp);
-
- *cp++ = c;
- }
- *cp = 0;
+ read_type_name (fin);
type_name = token_buffer;
value_components_used = 1;
-
c = getc (fin);
}
{
bucket *sdummy;
- /* Since the action was written out with this rule's */
- /* number, we must give the new rule this number */
- /* by inserting the new rule before it. */
+ /* Since the action was written out with this rule's
+ number, we must give the new rule this number by
+ inserting the new rule before it. */
/* Make a dummy nonterminal, a gensym. */
sdummy = gensym ();
p->next = crule1;
crule1->next = crule;
- /* insert the dummy generated by that rule into this rule. */
+ /* Insert the dummy generated by that rule into this
+ rule. */
nitems++;
p = XCALLOC (symbol_list, 1);
p->sym = sdummy;
{
struct bucket *link;
struct bucket *next;
+
+ /* The key, name of the symbol. */
char *tag;
+ /* Its type. */
char *type_name;
short value;
short prec;