729 lines
15 KiB
Plaintext
729 lines
15 KiB
Plaintext
/*
|
|
* @OSF_COPYRIGHT@
|
|
* COPYRIGHT NOTICE
|
|
* Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
|
|
* ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
|
|
* the full copyright text.
|
|
*/
|
|
/*
|
|
* HISTORY
|
|
*/
|
|
/* "$TOG: wmlparse.y /main/10 1997/04/14 12:56:03 dbl $" */
|
|
/*
|
|
* This file defines the grammar for the Motif Widget Meta Language (WML),
|
|
* the declarative language which describes the widget, gadgets, and
|
|
* resources in the UIL language.
|
|
*/
|
|
|
|
|
|
%{
|
|
|
|
#include "wml.h"
|
|
|
|
#if defined(__STDC__)
|
|
#include <string.h> /* for strcpy() */
|
|
#endif
|
|
|
|
#ifndef XmConst
|
|
#if (defined(__STDC__) && __STDC__) || !defined( NO_CONST )
|
|
#define XmConst const
|
|
#else
|
|
#define XmConst
|
|
#endif /* __STDC__ */
|
|
#endif /* XmConst */
|
|
|
|
/*
|
|
* Undefine NULL, since it is defined in stdio
|
|
*/
|
|
#undef NULL
|
|
|
|
%}
|
|
|
|
|
|
/*
|
|
* Tokens defining terminals of the language
|
|
*/
|
|
|
|
/*
|
|
* token 0 is EOF, not defined here
|
|
*/
|
|
|
|
/*
|
|
* WML statements
|
|
*/
|
|
%token CLASS 1 /* CLASS statement */
|
|
%token RESOURCE 2 /* RESOURCE statement */
|
|
%token DATATYPE 3 /* DATATYPE statement */
|
|
%token CONTROLLIST 4 /* CONTROLLIST statement */
|
|
%token ENUMERATIONSET 5 /* ENUMERATIONSET statement */
|
|
%token ENUMERATIONVALUE 6 /* ENUMERATIONVALUE statement */
|
|
%token CHARACTERSET 7 /* CHARACTERSET statement */
|
|
%token CHILD 50 /* CHILD statement */
|
|
/*
|
|
* Statement attributes
|
|
*/
|
|
%token DOCNAME 8 /* DOCNAME attribute */
|
|
%token CONVFUNC 9 /* CONVENIENCEFUNCTION attribute */
|
|
%token ALIAS 10 /* ALIAS attribute */
|
|
%token TYPE 11 /* TYPE attribute */
|
|
%token RESOURCELITERAL 12 /* RESOURCELITERAL attribute */
|
|
%token RELATED 13 /* RELATED attribute */
|
|
%token INTERNALLITERAL 14 /* INTERNALLITERAL attribute */
|
|
%token XRMRESOURCE 15 /* XRMRESOURCE attribute */
|
|
%token EXCLUDE 16 /* EXCLUDE attribute */
|
|
%token RESOURCES 17 /* RESOURCES attribute */
|
|
%token SUPERCLASS 18 /* SUPERCLASS attribute */
|
|
%token CONTROLS 19 /* CONTROLS attribute */
|
|
%token WIDGETCLASS 20 /* WIDGETCLASS attribute */
|
|
%token DIALOGCLASS 21 /* DIALOGCLASS attribute */
|
|
%token DEFAULT 22 /* DEFAULT attribute */
|
|
%token ENUMLITERAL 23 /* ENUMLITERAL attribute */
|
|
%token XMSTRINGCHARSETNAME 24 /* XMSTRINGCHARSETNAME attribute */
|
|
%token DIRECTION 25 /* DIRECTION attribute */
|
|
%token PARSEDIRECTION 26 /* PARSEDIRECTION attribute */
|
|
%token CHARACTERSIZE 27 /* CHARACTERSIZE attribute */
|
|
%token CTRLMAPSRESOURCE 28 /* CTRLMAPSRESOURCE attribute */
|
|
%token CHILDREN 51 /* CHILDREN attribute */
|
|
%token PARENTCLASS 52 /* PARENTCLASS attribute */
|
|
/*
|
|
* Other keywords
|
|
*/
|
|
%token METACLASS 29 /* CLASS type */
|
|
%token WIDGET 30 /* CLASS type */
|
|
%token GADGET 31 /* CLASS type */
|
|
%token ARGUMENT 32 /* RESOURCE type */
|
|
%token REASON 33 /* RESOURCE type */
|
|
%token CONSTRAINT 34 /* RESOURCE type */
|
|
%token SUBRESOURCE 35 /* RESOURCE type */
|
|
%token ATTRTRUE 36 /* attribute value */
|
|
%token ATTRFALSE 37 /* attribute value */
|
|
%token LEFTTORIGHT 38 /* DIRECTION attribute */
|
|
%token RIGHTTOLEFT 39 /* DIRECTION attribute */
|
|
%token ONEBYTE 40 /* CHARACTERSIZE attribute */
|
|
%token TWOBYTE 41 /* CHARACTERSIZE attribute */
|
|
%token MIXED1_2BYTE 42 /* CHARACTERSIZE attribute */
|
|
|
|
|
|
/*
|
|
* Special characters
|
|
*/
|
|
%token COLON 43
|
|
%token SEMICOLON 44
|
|
%token EQUALS 45
|
|
%token LBRACE 46
|
|
%token RBRACE 47
|
|
|
|
/*
|
|
* non-terminals
|
|
*/
|
|
%token STRING 48 /* Any user literal */
|
|
|
|
/*
|
|
* Others
|
|
*/
|
|
%token ERRORTOKEN 49 /* Any unrecognized character */
|
|
|
|
|
|
%start statement_block_list
|
|
|
|
%%
|
|
|
|
|
|
/*
|
|
* Productions of the WML grammar. All routines assume that current
|
|
* data structures are kept in globals. This works as the language has
|
|
* no recursive elements.
|
|
*/
|
|
|
|
/*
|
|
* The language consists of blocks of statements. The blocks may occur
|
|
* in any order, and blocks of the same kind may be arbitrarily repeated.
|
|
*/
|
|
|
|
statement_block_list
|
|
: /* empty */
|
|
| statement_block_list statement_block
|
|
;
|
|
|
|
statement_block
|
|
: class_statement_block
|
|
| resource_statement_block
|
|
| child_statement_block
|
|
| datatype_statement_block
|
|
| ctrlist_statement_block
|
|
| enumset_statement_block
|
|
| enumval_statement_block
|
|
| charset_statement_block
|
|
| error { LexIssueError(0); } SEMICOLON
|
|
;
|
|
|
|
|
|
/*
|
|
* Statement blocks. Each statement block begins with its identifying
|
|
* keyword, then includes an arbitrary number of statements
|
|
*/
|
|
class_statement_block
|
|
: CLASS
|
|
class_statement_list
|
|
;
|
|
|
|
class_statement_list
|
|
: class_statement SEMICOLON
|
|
| class_statement_list class_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
resource_statement_block
|
|
: RESOURCE
|
|
resource_statement_list
|
|
;
|
|
|
|
resource_statement_list
|
|
: resource_statement SEMICOLON
|
|
| resource_statement_list resource_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
child_statement_block
|
|
: CHILD
|
|
child_statement_list
|
|
;
|
|
|
|
child_statement_list
|
|
: child_statement SEMICOLON
|
|
| child_statement_list child_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
datatype_statement_block
|
|
: DATATYPE
|
|
datatype_statement_list
|
|
;
|
|
|
|
datatype_statement_list
|
|
: datatype_statement SEMICOLON
|
|
| datatype_statement_list datatype_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
ctrlist_statement_block
|
|
: CONTROLLIST
|
|
ctrlist_statement_list
|
|
;
|
|
|
|
ctrlist_statement_list
|
|
: ctrlist_statement SEMICOLON
|
|
| ctrlist_statement_list ctrlist_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
enumset_statement_block
|
|
: ENUMERATIONSET
|
|
enumset_statement_list
|
|
;
|
|
|
|
enumset_statement_list
|
|
: enumset_statement SEMICOLON
|
|
| enumset_statement_list enumset_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
enumval_statement_block
|
|
: ENUMERATIONVALUE
|
|
enumval_statement_list
|
|
;
|
|
|
|
enumval_statement_list
|
|
: enumval_statement SEMICOLON
|
|
| enumval_statement_list enumval_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
charset_statement_block
|
|
: CHARACTERSET
|
|
charset_statement_list
|
|
;
|
|
|
|
charset_statement_list
|
|
: charset_statement SEMICOLON
|
|
| charset_statement_list charset_statement SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
|
|
|
|
/*
|
|
* The CLASS statement
|
|
*/
|
|
class_statement
|
|
: name
|
|
COLON
|
|
class_type
|
|
{ wmlCreateClass (yynameval, yytknval1); }
|
|
class_definition
|
|
;
|
|
|
|
class_type
|
|
: METACLASS { yytknval1 = METACLASS; }
|
|
| WIDGET { yytknval1 = WIDGET; }
|
|
| GADGET { yytknval1 = GADGET; }
|
|
;
|
|
|
|
class_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE class_attribute_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
class_attribute_list
|
|
: class_attribute
|
|
| class_attribute_list class_attribute
|
|
;
|
|
|
|
class_attribute
|
|
: class_attribute_name
|
|
EQUALS
|
|
STRING
|
|
{ wmlAddClassAttribute (yytknval1, yystringval); }
|
|
SEMICOLON
|
|
| boolean_class_attribute_name
|
|
EQUALS
|
|
boolean_attribute_value
|
|
{ wmlAddClassAttribute (yytknval1, yytknval2); }
|
|
SEMICOLON
|
|
| class_resources SEMICOLON
|
|
| class_controls SEMICOLON
|
|
| class_children SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
class_attribute_name
|
|
: SUPERCLASS { yytknval1 = SUPERCLASS; }
|
|
| PARENTCLASS { yytknval1 = PARENTCLASS; }
|
|
| INTERNALLITERAL { yytknval1 = INTERNALLITERAL; }
|
|
| DOCNAME { yytknval1 = DOCNAME; }
|
|
| CONVFUNC { yytknval1 = CONVFUNC; }
|
|
| WIDGETCLASS { yytknval1 = WIDGETCLASS; }
|
|
| CTRLMAPSRESOURCE { yytknval1 = CTRLMAPSRESOURCE; }
|
|
;
|
|
|
|
boolean_class_attribute_name
|
|
: DIALOGCLASS { yytknval1 = DIALOGCLASS; }
|
|
|
|
boolean_attribute_value
|
|
: ATTRTRUE { yytknval2 = ATTRTRUE; }
|
|
| ATTRFALSE { yytknval2 = ATTRFALSE; }
|
|
;
|
|
|
|
class_resources
|
|
: RESOURCES class_resources_block
|
|
;
|
|
|
|
class_resources_block
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE class_resource_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
class_resource_list
|
|
: class_resource_element
|
|
| class_resource_list class_resource_element
|
|
;
|
|
|
|
class_resource_element
|
|
: name
|
|
{ wmlAddClassResource (yynameval); }
|
|
class_resource_attributes
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
class_resource_attributes
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE class_resource_attribute_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
class_resource_attribute_list
|
|
: class_resource_attribute_element
|
|
| class_resource_attribute_list class_resource_attribute_element
|
|
;
|
|
|
|
class_resource_attribute_element
|
|
: class_resource_attribute_name
|
|
EQUALS
|
|
STRING
|
|
{ wmlAddClassResourceAttribute (yytknval1, yystringval); }
|
|
SEMICOLON
|
|
| boolean_class_resource_attribute_name
|
|
EQUALS
|
|
boolean_attribute_value
|
|
{ wmlAddClassResourceAttribute (yytknval1, yytknval2); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
class_resource_attribute_name
|
|
: TYPE { yytknval1 = TYPE; }
|
|
| DEFAULT { yytknval1 = DEFAULT; }
|
|
;
|
|
|
|
boolean_class_resource_attribute_name
|
|
: EXCLUDE { yytknval1 = EXCLUDE; }
|
|
;
|
|
|
|
class_controls
|
|
: CONTROLS class_controls_block
|
|
;
|
|
|
|
class_controls_block
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE class_controls_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
class_controls_list
|
|
: class_controls_element
|
|
| class_controls_list class_controls_element
|
|
;
|
|
|
|
class_controls_element
|
|
: name
|
|
{ wmlAddClassControl (yynameval); }
|
|
class_controls_attributes
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
class_controls_attributes
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
class_children
|
|
: CHILDREN class_children_block
|
|
;
|
|
|
|
class_children_block
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE class_children_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
class_children_list
|
|
: class_children_element
|
|
| class_children_list class_children_element
|
|
;
|
|
|
|
class_children_element
|
|
: name
|
|
{ wmlAddClassChild (yynameval); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
|
|
|
|
/*
|
|
* The RESOURCE statement
|
|
*/
|
|
resource_statement
|
|
: name
|
|
COLON
|
|
resource_type
|
|
{ wmlCreateResource (yynameval, yytknval1); }
|
|
resource_definition
|
|
;
|
|
|
|
resource_type
|
|
: ARGUMENT { yytknval1 = ARGUMENT; }
|
|
| REASON { yytknval1 = REASON; }
|
|
| CONSTRAINT { yytknval1 = CONSTRAINT; }
|
|
| SUBRESOURCE { yytknval1 = SUBRESOURCE; }
|
|
;
|
|
|
|
resource_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE resource_attribute_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
resource_attribute_list
|
|
: resource_attribute
|
|
| resource_attribute_list resource_attribute
|
|
;
|
|
|
|
resource_attribute
|
|
: resource_attribute_name
|
|
EQUALS
|
|
STRING
|
|
{ wmlAddResourceAttribute (yytknval1, yystringval); }
|
|
SEMICOLON
|
|
| boolean_resource_resource_attribute_name
|
|
EQUALS
|
|
boolean_attribute_value
|
|
{ wmlAddResourceAttribute (yytknval1, yytknval2); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
resource_attribute_name
|
|
: TYPE { yytknval1 = TYPE; }
|
|
| RESOURCELITERAL { yytknval1 = RESOURCELITERAL; }
|
|
| ENUMERATIONSET { yytknval1 = ENUMERATIONSET; }
|
|
| INTERNALLITERAL { yytknval1 = INTERNALLITERAL; }
|
|
| RELATED { yytknval1 = RELATED; }
|
|
| DOCNAME { yytknval1 = DOCNAME; }
|
|
| DEFAULT { yytknval1 = DEFAULT; }
|
|
| ALIAS { yytknval1 = ALIAS; }
|
|
;
|
|
|
|
boolean_resource_resource_attribute_name
|
|
: XRMRESOURCE { yytknval1 = XRMRESOURCE; }
|
|
;
|
|
|
|
|
|
/*
|
|
* The CHILD statement
|
|
*/
|
|
child_statement
|
|
: name COLON STRING
|
|
{ wmlCreateChild(yynameval, yystringval); }
|
|
;
|
|
|
|
|
|
/*
|
|
* DATATYPE statement
|
|
*/
|
|
datatype_statement
|
|
: name
|
|
{ wmlCreateDatatype (yystringval); }
|
|
datatype_definition
|
|
;
|
|
|
|
datatype_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE datatype_attribute_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
datatype_attribute_list
|
|
: datatype_attribute
|
|
| datatype_attribute_list datatype_attribute
|
|
;
|
|
|
|
datatype_attribute
|
|
: datatype_attribute_name
|
|
EQUALS
|
|
STRING
|
|
{ wmlAddDatatypeAttribute (yytknval1, yystringval); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
datatype_attribute_name
|
|
: INTERNALLITERAL { yytknval1 = INTERNALLITERAL; }
|
|
| DOCNAME { yytknval1 = DOCNAME; }
|
|
| XRMRESOURCE { yytknval1 = XRMRESOURCE; }
|
|
;
|
|
|
|
|
|
|
|
/*
|
|
* The CONTROLLIST statement
|
|
*/
|
|
ctrlist_statement
|
|
: name
|
|
{ wmlCreateOrAppendCtrlList (yynameval); }
|
|
ctrlist_definition
|
|
;
|
|
|
|
ctrlist_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE ctrlist_controls_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
ctrlist_controls_list
|
|
: ctrlist_control
|
|
| ctrlist_controls_list ctrlist_control
|
|
;
|
|
|
|
ctrlist_control
|
|
: name
|
|
{ wmlAddCtrlListControl (yynameval); }
|
|
ctrlist_controls_attributes
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
ctrlist_controls_attributes
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
|
|
|
|
/*
|
|
* The ENUMERATIONSET statement
|
|
*/
|
|
enumset_statement
|
|
: name
|
|
COLON
|
|
enumset_data_type
|
|
{ wmlCreateEnumSet (yynameval, yystringval); }
|
|
enumset_definition
|
|
;
|
|
|
|
enumset_data_type
|
|
:
|
|
STRING
|
|
;
|
|
|
|
enumset_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE enumset_value_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
enumset_value_list
|
|
: enumset_value
|
|
| enumset_value_list enumset_value
|
|
;
|
|
|
|
enumset_value
|
|
: name
|
|
{ wmlAddEnumSetValue (yynameval); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
|
|
|
|
/*
|
|
* The ENUMERATIONVALUE statement
|
|
*/
|
|
enumval_statement
|
|
: name
|
|
COLON
|
|
{ wmlCreateEnumValue (yynameval); }
|
|
enumvalue_definition
|
|
;
|
|
|
|
enumvalue_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE enumvalue_attributes_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
enumvalue_attributes_list
|
|
: enumvalue_attribute
|
|
| enumvalue_attributes_list enumvalue_attribute
|
|
;
|
|
|
|
enumvalue_attribute
|
|
: enumvalue_attribute_name
|
|
EQUALS
|
|
STRING
|
|
{ wmlAddEnumValueAttribute (yytknval1, yystringval); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
enumvalue_attribute_name
|
|
: ENUMLITERAL { yytknval1 = ENUMLITERAL; }
|
|
;
|
|
|
|
|
|
|
|
/*
|
|
* CHARACTERSET statement
|
|
*/
|
|
charset_statement
|
|
: name
|
|
{ wmlCreateCharset (yystringval); }
|
|
charset_definition
|
|
;
|
|
|
|
charset_definition
|
|
: /* empty */
|
|
| LBRACE RBRACE
|
|
| LBRACE charset_attribute_list RBRACE
|
|
| error { LexIssueError(RBRACE); } RBRACE
|
|
;
|
|
|
|
charset_attribute_list
|
|
: charset_attribute
|
|
| charset_attribute_list charset_attribute
|
|
;
|
|
|
|
charset_attribute
|
|
: charset_attribute_name
|
|
EQUALS
|
|
STRING
|
|
{ wmlAddCharsetAttribute (yytknval1, yystringval); }
|
|
SEMICOLON
|
|
| predefined_charset_attribute_name
|
|
EQUALS
|
|
predefined_charset_attribute_value
|
|
{ wmlAddCharsetAttribute (yytknval1, yytknval2); }
|
|
SEMICOLON
|
|
| error { LexIssueError(SEMICOLON); } SEMICOLON
|
|
;
|
|
|
|
charset_attribute_name
|
|
: INTERNALLITERAL { yytknval1 = INTERNALLITERAL; }
|
|
| ALIAS { yytknval1 = ALIAS; }
|
|
| XMSTRINGCHARSETNAME { yytknval1 = XMSTRINGCHARSETNAME; }
|
|
;
|
|
|
|
predefined_charset_attribute_name
|
|
: DIRECTION { yytknval1 = DIRECTION; }
|
|
| PARSEDIRECTION { yytknval1 = PARSEDIRECTION; }
|
|
| CHARACTERSIZE { yytknval1 = CHARACTERSIZE; }
|
|
;
|
|
|
|
predefined_charset_attribute_value
|
|
: LEFTTORIGHT { yytknval2 = LEFTTORIGHT; }
|
|
| RIGHTTOLEFT { yytknval2 = RIGHTTOLEFT; }
|
|
| ONEBYTE { yytknval2 = ONEBYTE; }
|
|
| TWOBYTE { yytknval2 = TWOBYTE; }
|
|
| MIXED1_2BYTE { yytknval2 = MIXED1_2BYTE; }
|
|
|
|
|
|
|
|
/*
|
|
* Other productions
|
|
*/
|
|
name
|
|
: STRING
|
|
{ strcpy (yynameval, (XmConst char *)yystringval); }
|
|
;
|
|
|
|
%%
|
|
|
|
/*
|
|
* Dummmy error routine, since we output our own.
|
|
*/
|
|
int yyerror (s)
|
|
char *s;
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
#include "wmllex.c"
|
|
|