summaryrefslogtreecommitdiffstats
path: root/binutils-2.24/binutils/mcparse.y
diff options
context:
space:
mode:
Diffstat (limited to 'binutils-2.24/binutils/mcparse.y')
-rw-r--r--binutils-2.24/binutils/mcparse.y356
1 files changed, 0 insertions, 356 deletions
diff --git a/binutils-2.24/binutils/mcparse.y b/binutils-2.24/binutils/mcparse.y
deleted file mode 100644
index 35328d17..00000000
--- a/binutils-2.24/binutils/mcparse.y
+++ /dev/null
@@ -1,356 +0,0 @@
-%{ /* mcparse.y -- parser for Windows mc files
- Copyright 2007
- Free Software Foundation, Inc.
-
- Parser for Windows mc files
- Written by Kai Tietz, Onevision.
-
- This file is part of GNU Binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* This is a parser for Windows rc files. It is based on the parser
- by Gunther Ebert <gunther.ebert@ixos-leipzig.de>. */
-
-#include "sysdep.h"
-#include "bfd.h"
-#include "bucomm.h"
-#include "libiberty.h"
-#include "windmc.h"
-#include "safe-ctype.h"
-
-static rc_uint_type mc_last_id = 0;
-static rc_uint_type mc_sefa_val = 0;
-static unichar *mc_last_symbol = NULL;
-static const mc_keyword *mc_cur_severity = NULL;
-static const mc_keyword *mc_cur_facility = NULL;
-static mc_node *cur_node = NULL;
-
-%}
-
-%union
-{
- rc_uint_type ival;
- unichar *ustr;
- const mc_keyword *tok;
- mc_node *nod;
-};
-
-%start input
-
-%token NL
-%token<ustr> MCIDENT MCFILENAME MCLINE MCCOMMENT
-%token<tok> MCTOKEN
-%token MCENDLINE
-%token MCLANGUAGENAMES MCFACILITYNAMES MCSEVERITYNAMES MCOUTPUTBASE MCMESSAGEIDTYPEDEF
-%token MCLANGUAGE MCMESSAGEID MCSEVERITY MCFACILITY MCSYMBOLICNAME
-%token <ival> MCNUMBER
-
-%type<ival> id vid sefasy_def
-%type<ustr> alias_name token lines comments
-%type<tok> lang
-
-%%
-input: entities
- ;
-
-entities:
- /* empty */
- | entities entity
- ;
-entity: global_section
- | message
- | comments
- {
- cur_node = mc_add_node ();
- cur_node->user_text = $1;
- }
- | error { mc_fatal ("syntax error"); }
-;
-
-global_section:
- MCSEVERITYNAMES '=' '(' severitymaps ')'
- | MCSEVERITYNAMES '=' '(' severitymaps error { mc_fatal ("missing ')' in SeverityNames"); }
- | MCSEVERITYNAMES '=' error { mc_fatal ("missing '(' in SeverityNames"); }
- | MCSEVERITYNAMES error { mc_fatal ("missing '=' for SeverityNames"); }
- | MCLANGUAGENAMES '=' '(' langmaps ')'
- | MCLANGUAGENAMES '=' '(' langmaps error { mc_fatal ("missing ')' in LanguageNames"); }
- | MCLANGUAGENAMES '=' error { mc_fatal ("missing '(' in LanguageNames"); }
- | MCLANGUAGENAMES error { mc_fatal ("missing '=' for LanguageNames"); }
- | MCFACILITYNAMES '=' '(' facilitymaps ')'
- | MCFACILITYNAMES '=' '(' facilitymaps error { mc_fatal ("missing ')' in FacilityNames"); }
- | MCFACILITYNAMES '=' error { mc_fatal ("missing '(' in FacilityNames"); }
- | MCFACILITYNAMES error { mc_fatal ("missing '=' for FacilityNames"); }
- | MCOUTPUTBASE '=' MCNUMBER
- {
- if ($3 != 10 && $3 != 16)
- mc_fatal ("OutputBase allows 10 or 16 as value");
- mcset_out_values_are_decimal = ($3 == 10 ? 1 : 0);
- }
- | MCMESSAGEIDTYPEDEF '=' MCIDENT
- {
- mcset_msg_id_typedef = $3;
- }
- | MCMESSAGEIDTYPEDEF '=' error
- {
- mc_fatal ("MessageIdTypedef expects an identifier");
- }
- | MCMESSAGEIDTYPEDEF error
- {
- mc_fatal ("missing '=' for MessageIdTypedef");
- }
-;
-
-severitymaps:
- severitymap
- | severitymaps severitymap
- | error { mc_fatal ("severity ident missing"); }
-;
-
-severitymap:
- token '=' MCNUMBER alias_name
- {
- mc_add_keyword ($1, MCTOKEN, "severity", $3, $4);
- }
- | token '=' error { mc_fatal ("severity number missing"); }
- | token error { mc_fatal ("severity missing '='"); }
-;
-
-facilitymaps:
- facilitymap
- | facilitymaps facilitymap
- | error { mc_fatal ("missing ident in FacilityNames"); }
-;
-
-facilitymap:
- token '=' MCNUMBER alias_name
- {
- mc_add_keyword ($1, MCTOKEN, "facility", $3, $4);
- }
- | token '=' error { mc_fatal ("facility number missing"); }
- | token error { mc_fatal ("facility missing '='"); }
-;
-
-langmaps:
- langmap
- | langmaps langmap
- | error { mc_fatal ("missing ident in LanguageNames"); }
-;
-
-langmap:
- token '=' MCNUMBER lex_want_filename ':' MCFILENAME
- {
- mc_add_keyword ($1, MCTOKEN, "language", $3, $6);
- }
- | token '=' MCNUMBER lex_want_filename ':' error { mc_fatal ("missing filename in LanguageNames"); }
- | token '=' MCNUMBER error { mc_fatal ("missing ':' in LanguageNames"); }
- | token '=' error { mc_fatal ("missing language code in LanguageNames"); }
- | token error { mc_fatal ("missing '=' for LanguageNames"); }
-;
-
-alias_name:
- /* empty */
- {
- $$ = NULL;
- }
- | ':' MCIDENT
- {
- $$ = $2;
- }
- | ':' error { mc_fatal ("illegal token in identifier"); $$ = NULL; }
-;
-
-message:
- id sefasy_def
- {
- cur_node = mc_add_node ();
- cur_node->symbol = mc_last_symbol;
- cur_node->facility = mc_cur_facility;
- cur_node->severity = mc_cur_severity;
- cur_node->id = ($1 & 0xffffUL);
- cur_node->vid = ($1 & 0xffffUL) | mc_sefa_val;
- mc_last_id = $1;
- }
- lang_entities
-;
-
-id: MCMESSAGEID '=' vid { $$ = $3; }
- | MCMESSAGEID '=' error { mc_fatal ("missing number in MessageId"); $$ = 0; }
- | MCMESSAGEID error { mc_fatal ("missing '=' for MessageId"); $$ = 0; }
-;
-
-vid: /* empty */
- {
- $$ = ++mc_last_id;
- }
- | MCNUMBER
- {
- $$ = $1;
- }
- | '+' MCNUMBER
- {
- $$ = mc_last_id + $2;
- }
- | '+' error { mc_fatal ("missing number after MessageId '+'"); }
-;
-
-sefasy_def:
- /* empty */
- {
- $$ = 0;
- mc_sefa_val = (mcset_custom_bit ? 1 : 0) << 29;
- mc_last_symbol = NULL;
- mc_cur_severity = NULL;
- mc_cur_facility = NULL;
- }
- | sefasy_def severity
- {
- if ($1 & 1)
- mc_warn (_("duplicate definition of Severity"));
- $$ = $1 | 1;
- }
- | sefasy_def facility
- {
- if ($1 & 2)
- mc_warn (_("duplicate definition of Facility"));
- $$ = $1 | 2;
- }
- | sefasy_def symbol
- {
- if ($1 & 4)
- mc_warn (_("duplicate definition of SymbolicName"));
- $$ = $1 | 4;
- }
-;
-
-severity: MCSEVERITY '=' MCTOKEN
- {
- mc_sefa_val &= ~ (0x3UL << 30);
- mc_sefa_val |= (($3->nval & 0x3UL) << 30);
- mc_cur_severity = $3;
- }
-;
-
-facility: MCFACILITY '=' MCTOKEN
- {
- mc_sefa_val &= ~ (0xfffUL << 16);
- mc_sefa_val |= (($3->nval & 0xfffUL) << 16);
- mc_cur_facility = $3;
- }
-;
-
-symbol: MCSYMBOLICNAME '=' MCIDENT
- {
- mc_last_symbol = $3;
- }
-;
-
-lang_entities:
- lang_entity
- | lang_entities lang_entity
-;
-
-lang_entity:
- lang lex_want_line lines MCENDLINE
- {
- mc_node_lang *h;
- h = mc_add_node_lang (cur_node, $1, cur_node->vid);
- h->message = $3;
- if (mcset_max_message_length != 0 && unichar_len (h->message) > mcset_max_message_length)
- mc_warn ("message length to long");
- }
-;
-
-lines: MCLINE
- {
- $$ = $1;
- }
- | lines MCLINE
- {
- unichar *h;
- rc_uint_type l1,l2;
- l1 = unichar_len ($1);
- l2 = unichar_len ($2);
- h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar));
- if (l1) memcpy (h, $1, l1 * sizeof (unichar));
- if (l2) memcpy (&h[l1], $2, l2 * sizeof (unichar));
- h[l1 + l2] = 0;
- $$ = h;
- }
- | error { mc_fatal ("missing end of message text"); $$ = NULL; }
- | lines error { mc_fatal ("missing end of message text"); $$ = $1; }
-;
-
-comments: MCCOMMENT { $$ = $1; }
- | comments MCCOMMENT
- {
- unichar *h;
- rc_uint_type l1,l2;
- l1 = unichar_len ($1);
- l2 = unichar_len ($2);
- h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar));
- if (l1) memcpy (h, $1, l1 * sizeof (unichar));
- if (l2) memcpy (&h[l1], $2, l2 * sizeof (unichar));
- h[l1 + l2] = 0;
- $$ = h;
- }
-;
-
-lang: MCLANGUAGE lex_want_nl '=' MCTOKEN NL
- {
- $$ = $4;
- }
- | MCLANGUAGE lex_want_nl '=' MCIDENT NL
- {
- $$ = NULL;
- mc_fatal (_("undeclared language identifier"));
- }
- | MCLANGUAGE lex_want_nl '=' token error
- {
- $$ = NULL;
- mc_fatal ("missing newline after Language");
- }
- | MCLANGUAGE lex_want_nl '=' error
- {
- $$ = NULL;
- mc_fatal ("missing ident for Language");
- }
- | MCLANGUAGE error
- {
- $$ = NULL;
- mc_fatal ("missing '=' for Language");
- }
-;
-
-token: MCIDENT { $$ = $1; }
- | MCTOKEN { $$ = $1->usz; }
-;
-
-lex_want_nl:
- /* Empty */ { mclex_want_nl = 1; }
-;
-
-lex_want_line:
- /* Empty */ { mclex_want_line = 1; }
-;
-
-lex_want_filename:
- /* Empty */ { mclex_want_filename = 1; }
-;
-
-%%
-
-/* Something else. */