Copyright (C) 2000-2012 |
GNU Info (bison.info)Token DeclToken Type Names ---------------- The basic way to declare a token type name (terminal symbol) is as follows: %token NAME Bison will convert this into a `#define' directive in the parser, so that the function `yylex' (if it is in this file) can use the name NAME to stand for this token type's code. Alternatively, you can use `%left', `%right', or `%nonassoc' instead of `%token', if you wish to specify associativity and precedence. Note: Operator Precedence. You can explicitly specify the numeric code for a token type by appending an integer value in the field immediately following the token name: %token NUM 300 It is generally best, however, to let Bison choose the numeric codes for all token types. Bison will automatically select codes that don't conflict with each other or with ASCII characters. In the event that the stack type is a union, you must augment the `%token' or other token declaration to include the data type alternative delimited by angle-brackets (Note: More Than One Value Type.). For example: %union { /* define stack type */ double val; symrec *tptr; } %token <val> NUM /* define token NUM and its type */ You can associate a literal string token with a token type name by writing the literal string at the end of a `%token' declaration which declares the name. For example: %token arrow "=>" For example, a grammar for the C language might specify these names with equivalent literal string tokens: %token <operator> OR "||" %token <operator> LE 134 "<=" %left OR "<=" Once you equate the literal string and the token name, you can use them interchangeably in further declarations or the grammar rules. The `yylex' function can use the token name or the literal string to obtain the token type code number (Note: Calling Convention). automatically generated by info2www version 1.2.2.9 |