%option prefix="gram_" outfile="lex.yy.c"
%{
-#include <config.h>
-#include "system.h"
-
/* Work around a bug in flex 2.5.31. See Debian bug 333231
<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
#undef gram_wrap
#include "complain.h"
#include "files.h"
-#include "getargs.h" /* yacc_flag */
#include "gram.h"
#include "quotearg.h"
#include "reader.h"
code_start = scanner_cursor = loc->start; \
/* Location of scanner cursor. */
-boundary scanner_cursor;
+static boundary scanner_cursor;
#define YY_USER_ACTION location_compute (loc, &scanner_cursor, yytext, yyleng);
STRING_FREE;
}
-/* The location of the most recently saved token, if it was a
- BRACED_CODE token; otherwise, this has an unspecified value. */
-location gram_last_braced_code_loc;
-
static void handle_syncline (char *, location);
static unsigned long int scan_integer (char const *p, int base, location loc);
static int convert_ucn_to_byte (char const *hex_text);
`----------------------------*/
<INITIAL>
{
- "%after-definitions" return PERCENT_AFTER_DEFINITIONS;
- "%before-definitions" return PERCENT_BEFORE_DEFINITIONS;
+ "%after-header" return PERCENT_AFTER_HEADER;
+ "%before-header" return PERCENT_BEFORE_HEADER;
"%binary" return PERCENT_NONASSOC;
"%debug" return PERCENT_DEBUG;
"%default"[-_]"prec" return PERCENT_DEFAULT_PREC;
"%defines" return PERCENT_DEFINES;
"%destructor" return PERCENT_DESTRUCTOR;
"%dprec" return PERCENT_DPREC;
+ "%end-header" return PERCENT_END_HEADER;
"%error"[-_]"verbose" return PERCENT_ERROR_VERBOSE;
"%expect" return PERCENT_EXPECT;
"%expect"[-_]"rr" return PERCENT_EXPECT_RR;
"%right" return PERCENT_RIGHT;
"%skeleton" return PERCENT_SKELETON;
"%start" return PERCENT_START;
+ "%start-header" return PERCENT_START_HEADER;
+ "%symbol-default" return PERCENT_SYMBOL_DEFAULT;
"%term" return PERCENT_TOKEN;
"%token" return PERCENT_TOKEN;
"%token"[-_]"table" return PERCENT_TOKEN_TABLE;
/* Code in between braces. */
"{" {
- if (current_rule && current_rule->action)
- grammar_midrule_action ();
STRING_GROW;
braces_level = 0;
code_start = loc->start;
<SC_ESCAPED_STRING>
{
- "\"" {
+ "\""|"\n" {
+ if (yytext[0] == '\n')
+ unexpected_newline (token_start, "\"");
+ STRING_FINISH;
+ loc->start = token_start;
+ val->chars = last_string;
+ BEGIN INITIAL;
+ return STRING;
+ }
+ <<EOF>> {
+ unexpected_eof (token_start, "\"");
STRING_FINISH;
loc->start = token_start;
val->chars = last_string;
BEGIN INITIAL;
return STRING;
}
- \n unexpected_newline (token_start, "\""); BEGIN INITIAL;
- <<EOF>> unexpected_eof (token_start, "\""); BEGIN INITIAL;
}
/*----------------------------------------------------------.
<SC_ESCAPED_CHARACTER>
{
- "'" {
+ "'"|"\n" {
+ if (yytext[0] == '\n')
+ unexpected_newline (token_start, "'");
STRING_GROW;
STRING_FINISH;
loc->start = token_start;
BEGIN INITIAL;
return CHAR;
}
- \n unexpected_newline (token_start, "'"); BEGIN INITIAL;
- <<EOF>> unexpected_eof (token_start, "'"); BEGIN INITIAL;
+ <<EOF>> {
+ unexpected_eof (token_start, "'");
+ STRING_FINISH;
+ loc->start = token_start;
+ if (strlen(last_string) > 1)
+ val->character = last_string[1];
+ else
+ val->character = last_string[0];
+ STRING_FREE;
+ BEGIN INITIAL;
+ return CHAR;
+ }
}
<SC_ESCAPED_CHARACTER,SC_ESCAPED_STRING>
STRING_FINISH;
loc->start = code_start;
val->chars = last_string;
- gram_last_braced_code_loc = *loc;
BEGIN INITIAL;
return BRACED_CODE;
}
(as `<' `<%'). */
"<"{splice}"<" STRING_GROW;
- <<EOF>> unexpected_eof (code_start, "}"); BEGIN INITIAL;
+ <<EOF>> {
+ unexpected_eof (code_start, "}");
+ STRING_FINISH;
+ loc->start = code_start;
+ val->chars = last_string;
+ BEGIN INITIAL;
+ return BRACED_CODE;
+ }
}
return PROLOGUE;
}
- <<EOF>> unexpected_eof (code_start, "%}"); BEGIN INITIAL;
+ <<EOF>> {
+ unexpected_eof (code_start, "%}");
+ STRING_FINISH;
+ loc->start = code_start;
+ val->chars = last_string;
+ BEGIN INITIAL;
+ return PROLOGUE;
+ }
}