Blame tools/wml/wmlparse.y

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
/* "$TOG: wmlparse.y /main/10 1997/04/14 12:56:03 dbl $" */
Packit b099d7
/*
Packit b099d7
 * This file defines the grammar for the Motif Widget Meta Language (WML),
Packit b099d7
 * the declarative language which describes the widget, gadgets, and 
Packit b099d7
 * resources in the UIL language.
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
%{
Packit b099d7
Packit b099d7
#include "wml.h"
Packit b099d7
Packit b099d7
#if defined(__STDC__)
Packit b099d7
#include <string.h>		/* for strcpy() */
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifndef XmConst
Packit b099d7
#if defined(__STDC__) || !defined( NO_CONST )
Packit b099d7
#define XmConst const
Packit b099d7
#else
Packit b099d7
#define XmConst
Packit b099d7
#endif /* __STDC__ */
Packit b099d7
#endif /* XmConst */
Packit b099d7
Packit b099d7
#if !defined(__STDC__)
Packit b099d7
/*
Packit b099d7
 * Undefine NULL, since it is defined in stdio
Packit b099d7
 */
Packit b099d7
#undef NULL
Packit b099d7
#endif
Packit b099d7
Packit b099d7
%}
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Tokens defining terminals of the language
Packit b099d7
 */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * token 0 is EOF, not defined here
Packit b099d7
 */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * WML statements
Packit b099d7
 */
Packit b099d7
%token	CLASS			1	/* CLASS statement */
Packit b099d7
%token	RESOURCE		2	/* RESOURCE statement */
Packit b099d7
%token	DATATYPE		3	/* DATATYPE statement */
Packit b099d7
%token	CONTROLLIST		4	/* CONTROLLIST statement */
Packit b099d7
%token	ENUMERATIONSET		5	/* ENUMERATIONSET statement */
Packit b099d7
%token	ENUMERATIONVALUE	6	/* ENUMERATIONVALUE statement */
Packit b099d7
%token	CHARACTERSET		7	/* CHARACTERSET statement */
Packit b099d7
%token	CHILD			50	/* CHILD statement */
Packit b099d7
/*
Packit b099d7
 * Statement attributes
Packit b099d7
 */
Packit b099d7
%token	DOCNAME			8	/* DOCNAME attribute */
Packit b099d7
%token	CONVFUNC		9	/* CONVENIENCEFUNCTION attribute */
Packit b099d7
%token	ALIAS			10	/* ALIAS attribute */
Packit b099d7
%token	TYPE			11	/* TYPE attribute */
Packit b099d7
%token	RESOURCELITERAL		12	/* RESOURCELITERAL attribute */
Packit b099d7
%token	RELATED			13	/* RELATED attribute */
Packit b099d7
%token	INTERNALLITERAL		14	/* INTERNALLITERAL attribute */
Packit b099d7
%token	XRMRESOURCE		15	/* XRMRESOURCE attribute */
Packit b099d7
%token	EXCLUDE			16	/* EXCLUDE attribute */
Packit b099d7
%token	RESOURCES		17	/* RESOURCES attribute */
Packit b099d7
%token	SUPERCLASS		18	/* SUPERCLASS attribute */
Packit b099d7
%token	CONTROLS		19	/* CONTROLS attribute */
Packit b099d7
%token	WIDGETCLASS		20	/* WIDGETCLASS attribute */
Packit b099d7
%token	DIALOGCLASS		21	/* DIALOGCLASS attribute */
Packit b099d7
%token	DEFAULT			22	/* DEFAULT attribute */
Packit b099d7
%token	ENUMLITERAL		23	/* ENUMLITERAL attribute */
Packit b099d7
%token	XMSTRINGCHARSETNAME	24	/* XMSTRINGCHARSETNAME attribute */
Packit b099d7
%token	DIRECTION		25	/* DIRECTION attribute */
Packit b099d7
%token	PARSEDIRECTION		26	/* PARSEDIRECTION attribute */
Packit b099d7
%token	CHARACTERSIZE		27	/* CHARACTERSIZE attribute */
Packit b099d7
%token	CTRLMAPSRESOURCE	28	/* CTRLMAPSRESOURCE attribute */
Packit b099d7
%token	CHILDREN		51	/* CHILDREN attribute */
Packit b099d7
%token	PARENTCLASS		52	/* PARENTCLASS attribute */
Packit b099d7
/*
Packit b099d7
 * Other keywords
Packit b099d7
 */
Packit b099d7
%token	METACLASS		29	/* CLASS type */
Packit b099d7
%token	WIDGET			30	/* CLASS type */
Packit b099d7
%token	GADGET			31	/* CLASS type */
Packit b099d7
%token	ARGUMENT		32	/* RESOURCE type */
Packit b099d7
%token	REASON			33	/* RESOURCE type */
Packit b099d7
%token	CONSTRAINT		34	/* RESOURCE type */
Packit b099d7
%token	SUBRESOURCE		35	/* RESOURCE type */
Packit b099d7
%token	ATTRTRUE		36	/* attribute value */
Packit b099d7
%token	ATTRFALSE		37	/* attribute value */
Packit b099d7
%token	LEFTTORIGHT		38	/* DIRECTION attribute */
Packit b099d7
%token	RIGHTTOLEFT		39	/* DIRECTION attribute */
Packit b099d7
%token	ONEBYTE			40	/* CHARACTERSIZE attribute */
Packit b099d7
%token	TWOBYTE			41	/* CHARACTERSIZE attribute */
Packit b099d7
%token	MIXED1_2BYTE		42	/* CHARACTERSIZE attribute */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Special characters
Packit b099d7
 */
Packit b099d7
%token	COLON			43
Packit b099d7
%token	SEMICOLON		44
Packit b099d7
%token	EQUALS			45
Packit b099d7
%token	LBRACE			46
Packit b099d7
%token	RBRACE			47
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * non-terminals
Packit b099d7
 */
Packit b099d7
%token	STRING			48	/* Any user literal */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Others
Packit b099d7
 */
Packit b099d7
%token	ERRORTOKEN		49	/* Any unrecognized character */
Packit b099d7
Packit b099d7
Packit b099d7
%start statement_block_list
Packit b099d7
Packit b099d7
%%
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Productions of the WML grammar. All routines assume that current
Packit b099d7
 * data structures are kept in globals. This works as the language has
Packit b099d7
 * no recursive elements.
Packit b099d7
 */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * The language consists of blocks of statements. The blocks may occur
Packit b099d7
 * in any order, and blocks of the same kind may be arbitrarily repeated.
Packit b099d7
 */
Packit b099d7
Packit b099d7
statement_block_list
Packit b099d7
	: /* empty */
Packit b099d7
	| statement_block_list statement_block
Packit b099d7
	;
Packit b099d7
Packit b099d7
statement_block
Packit b099d7
	: class_statement_block
Packit b099d7
	| resource_statement_block
Packit b099d7
        | child_statement_block
Packit b099d7
	| datatype_statement_block
Packit b099d7
	| ctrlist_statement_block
Packit b099d7
	| enumset_statement_block
Packit b099d7
	| enumval_statement_block
Packit b099d7
	| charset_statement_block
Packit b099d7
	| error { LexIssueError(0); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Statement blocks. Each statement block begins with its identifying
Packit b099d7
 * keyword, then includes an arbitrary number of statements
Packit b099d7
 */
Packit b099d7
class_statement_block
Packit b099d7
	: CLASS
Packit b099d7
	    class_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
class_statement_list
Packit b099d7
	: class_statement SEMICOLON
Packit b099d7
	| class_statement_list class_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
resource_statement_block
Packit b099d7
	: RESOURCE
Packit b099d7
	    resource_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
resource_statement_list
Packit b099d7
	: resource_statement SEMICOLON
Packit b099d7
	| resource_statement_list resource_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
child_statement_block
Packit b099d7
	: CHILD
Packit b099d7
	    child_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
child_statement_list
Packit b099d7
	: child_statement SEMICOLON
Packit b099d7
	| child_statement_list child_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
datatype_statement_block
Packit b099d7
	: DATATYPE
Packit b099d7
	    datatype_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
datatype_statement_list
Packit b099d7
	: datatype_statement SEMICOLON
Packit b099d7
	| datatype_statement_list datatype_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
ctrlist_statement_block
Packit b099d7
	: CONTROLLIST
Packit b099d7
	    ctrlist_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
ctrlist_statement_list
Packit b099d7
	: ctrlist_statement SEMICOLON
Packit b099d7
	| ctrlist_statement_list ctrlist_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumset_statement_block
Packit b099d7
	: ENUMERATIONSET
Packit b099d7
	    enumset_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
enumset_statement_list
Packit b099d7
	: enumset_statement SEMICOLON
Packit b099d7
	| enumset_statement_list enumset_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumval_statement_block
Packit b099d7
	: ENUMERATIONVALUE
Packit b099d7
	    enumval_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
enumval_statement_list
Packit b099d7
	: enumval_statement SEMICOLON
Packit b099d7
	| enumval_statement_list enumval_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
charset_statement_block
Packit b099d7
	: CHARACTERSET
Packit b099d7
	    charset_statement_list
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
charset_statement_list
Packit b099d7
	: charset_statement SEMICOLON
Packit b099d7
	| charset_statement_list charset_statement SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The CLASS statement
Packit b099d7
 */
Packit b099d7
class_statement
Packit b099d7
	: name
Packit b099d7
	    COLON
Packit b099d7
	    class_type
Packit b099d7
		{ wmlCreateClass (yynameval, yytknval1); }
Packit b099d7
	    class_definition
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_type
Packit b099d7
	: METACLASS		{ yytknval1 = METACLASS; }
Packit b099d7
	| WIDGET		{ yytknval1 = WIDGET; }
Packit b099d7
	| GADGET		{ yytknval1 = GADGET; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE class_attribute_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_attribute_list
Packit b099d7
	: class_attribute
Packit b099d7
	| class_attribute_list class_attribute
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_attribute
Packit b099d7
	: class_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    STRING
Packit b099d7
		{ wmlAddClassAttribute (yytknval1, yystringval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| boolean_class_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    boolean_attribute_value
Packit b099d7
		{ wmlAddClassAttribute (yytknval1, yytknval2); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| class_resources SEMICOLON
Packit b099d7
	| class_controls SEMICOLON
Packit b099d7
        | class_children SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_attribute_name
Packit b099d7
	: SUPERCLASS		{ yytknval1 = SUPERCLASS; }
Packit b099d7
	| PARENTCLASS		{ yytknval1 = PARENTCLASS; }
Packit b099d7
	| INTERNALLITERAL	{ yytknval1 = INTERNALLITERAL; }
Packit b099d7
	| DOCNAME		{ yytknval1 = DOCNAME; }
Packit b099d7
	| CONVFUNC		{ yytknval1 = CONVFUNC; }
Packit b099d7
	| WIDGETCLASS		{ yytknval1 = WIDGETCLASS; }
Packit b099d7
	| CTRLMAPSRESOURCE	{ yytknval1 = CTRLMAPSRESOURCE; }
Packit b099d7
	| ALIAS			{ yytknval1 = ALIAS; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
boolean_class_attribute_name
Packit b099d7
	: DIALOGCLASS		{ yytknval1 = DIALOGCLASS; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
boolean_attribute_value
Packit b099d7
	: ATTRTRUE		{ yytknval2 = ATTRTRUE; }
Packit b099d7
	| ATTRFALSE		{ yytknval2 = ATTRFALSE; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resources
Packit b099d7
	: RESOURCES class_resources_block
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resources_block
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE class_resource_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resource_list
Packit b099d7
	: class_resource_element
Packit b099d7
	| class_resource_list class_resource_element
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resource_element
Packit b099d7
	: name
Packit b099d7
		{ wmlAddClassResource (yynameval); }
Packit b099d7
	    class_resource_attributes
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resource_attributes
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE class_resource_attribute_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resource_attribute_list
Packit b099d7
	: class_resource_attribute_element
Packit b099d7
	| class_resource_attribute_list class_resource_attribute_element
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resource_attribute_element
Packit b099d7
	: class_resource_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    STRING
Packit b099d7
		{ wmlAddClassResourceAttribute (yytknval1, yystringval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| boolean_class_resource_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    boolean_attribute_value
Packit b099d7
		{ wmlAddClassResourceAttribute (yytknval1, yytknval2); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_resource_attribute_name
Packit b099d7
	: TYPE			{ yytknval1 = TYPE; }
Packit b099d7
	| DEFAULT		{ yytknval1 = DEFAULT; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
boolean_class_resource_attribute_name
Packit b099d7
	: EXCLUDE		{ yytknval1 = EXCLUDE; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_controls
Packit b099d7
	: CONTROLS class_controls_block
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_controls_block
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE class_controls_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_controls_list
Packit b099d7
	: class_controls_element
Packit b099d7
	| class_controls_list class_controls_element
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_controls_element
Packit b099d7
	: name
Packit b099d7
		{ wmlAddClassControl (yynameval); }
Packit b099d7
	    class_controls_attributes
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_controls_attributes
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_children
Packit b099d7
	: CHILDREN class_children_block
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_children_block
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE class_children_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_children_list
Packit b099d7
	: class_children_element
Packit b099d7
	| class_children_list class_children_element
Packit b099d7
	;
Packit b099d7
Packit b099d7
class_children_element
Packit b099d7
	: name
Packit b099d7
		{ wmlAddClassChild (yynameval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The RESOURCE statement
Packit b099d7
 */
Packit b099d7
resource_statement
Packit b099d7
	: name
Packit b099d7
	    COLON
Packit b099d7
	    resource_type
Packit b099d7
		{ wmlCreateResource (yynameval, yytknval1); }
Packit b099d7
	    resource_definition
Packit b099d7
	;
Packit b099d7
Packit b099d7
resource_type
Packit b099d7
	: ARGUMENT		{ yytknval1 = ARGUMENT; }
Packit b099d7
	| REASON		{ yytknval1 = REASON; }
Packit b099d7
	| CONSTRAINT		{ yytknval1 = CONSTRAINT; }
Packit b099d7
	| SUBRESOURCE		{ yytknval1 = SUBRESOURCE; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
resource_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE resource_attribute_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
resource_attribute_list
Packit b099d7
	: resource_attribute
Packit b099d7
	| resource_attribute_list resource_attribute
Packit b099d7
	;
Packit b099d7
Packit b099d7
resource_attribute
Packit b099d7
	: resource_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    STRING
Packit b099d7
		{ wmlAddResourceAttribute (yytknval1, yystringval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| boolean_resource_resource_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    boolean_attribute_value
Packit b099d7
		{ wmlAddResourceAttribute (yytknval1, yytknval2); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
resource_attribute_name
Packit b099d7
	: TYPE			{ yytknval1 = TYPE; }
Packit b099d7
	| RESOURCELITERAL	{ yytknval1 = RESOURCELITERAL; }
Packit b099d7
	| ENUMERATIONSET	{ yytknval1 = ENUMERATIONSET; }
Packit b099d7
	| INTERNALLITERAL	{ yytknval1 = INTERNALLITERAL; }
Packit b099d7
	| RELATED		{ yytknval1 = RELATED; }
Packit b099d7
	| DOCNAME		{ yytknval1 = DOCNAME; }
Packit b099d7
	| DEFAULT		{ yytknval1 = DEFAULT; }
Packit b099d7
	| ALIAS			{ yytknval1 = ALIAS; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
boolean_resource_resource_attribute_name
Packit b099d7
	: XRMRESOURCE		{ yytknval1 = XRMRESOURCE; }
Packit b099d7
	;
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The CHILD statement
Packit b099d7
 */
Packit b099d7
child_statement
Packit b099d7
       : name COLON STRING
Packit b099d7
          { wmlCreateChild(yynameval, yystringval); }
Packit b099d7
       ;
Packit b099d7
  
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * DATATYPE statement
Packit b099d7
 */
Packit b099d7
datatype_statement
Packit b099d7
	: name
Packit b099d7
		{ wmlCreateDatatype (yystringval); }
Packit b099d7
	    datatype_definition
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
datatype_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE datatype_attribute_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
datatype_attribute_list
Packit b099d7
	: datatype_attribute
Packit b099d7
	| datatype_attribute_list datatype_attribute
Packit b099d7
	;
Packit b099d7
Packit b099d7
datatype_attribute
Packit b099d7
	: datatype_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    STRING
Packit b099d7
		{ wmlAddDatatypeAttribute (yytknval1, yystringval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
datatype_attribute_name
Packit b099d7
	: INTERNALLITERAL	{ yytknval1 = INTERNALLITERAL; }
Packit b099d7
	| DOCNAME		{ yytknval1 = DOCNAME; }
Packit b099d7
	| XRMRESOURCE		{ yytknval1 = XRMRESOURCE; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The CONTROLLIST statement
Packit b099d7
 */
Packit b099d7
ctrlist_statement
Packit b099d7
	: name
Packit b099d7
		{ wmlCreateOrAppendCtrlList (yynameval); }
Packit b099d7
	    ctrlist_definition
Packit b099d7
	;
Packit b099d7
Packit b099d7
ctrlist_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE ctrlist_controls_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
ctrlist_controls_list
Packit b099d7
	: ctrlist_control
Packit b099d7
	| ctrlist_controls_list ctrlist_control
Packit b099d7
	;
Packit b099d7
Packit b099d7
ctrlist_control
Packit b099d7
	: name
Packit b099d7
		{ wmlAddCtrlListControl (yynameval); }
Packit b099d7
	    ctrlist_controls_attributes
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
ctrlist_controls_attributes
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The ENUMERATIONSET statement
Packit b099d7
 */
Packit b099d7
enumset_statement
Packit b099d7
	: name
Packit b099d7
	    COLON
Packit b099d7
	    enumset_data_type
Packit b099d7
		{ wmlCreateEnumSet (yynameval, yystringval); }
Packit b099d7
	    enumset_definition
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumset_data_type
Packit b099d7
	:
Packit b099d7
	STRING
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumset_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE enumset_value_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumset_value_list
Packit b099d7
	: enumset_value
Packit b099d7
	| enumset_value_list enumset_value
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumset_value
Packit b099d7
	: name
Packit b099d7
	    { wmlAddEnumSetValue (yynameval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The ENUMERATIONVALUE statement
Packit b099d7
 */
Packit b099d7
enumval_statement
Packit b099d7
	: name
Packit b099d7
	    COLON    
Packit b099d7
		{ wmlCreateEnumValue (yynameval); }
Packit b099d7
	    enumvalue_definition
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumvalue_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE enumvalue_attributes_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumvalue_attributes_list
Packit b099d7
	: enumvalue_attribute
Packit b099d7
	| enumvalue_attributes_list enumvalue_attribute
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumvalue_attribute
Packit b099d7
	: enumvalue_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    STRING
Packit b099d7
	        { wmlAddEnumValueAttribute (yytknval1, yystringval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
enumvalue_attribute_name
Packit b099d7
	: ENUMLITERAL		{ yytknval1 = ENUMLITERAL; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * CHARACTERSET statement
Packit b099d7
 */
Packit b099d7
charset_statement
Packit b099d7
	: name
Packit b099d7
		{ wmlCreateCharset (yystringval); }
Packit b099d7
	    charset_definition
Packit b099d7
	    ;
Packit b099d7
Packit b099d7
charset_definition
Packit b099d7
	: /* empty */
Packit b099d7
	| LBRACE RBRACE
Packit b099d7
	| LBRACE charset_attribute_list RBRACE
Packit b099d7
	| error { LexIssueError(RBRACE); } RBRACE
Packit b099d7
	;
Packit b099d7
Packit b099d7
charset_attribute_list
Packit b099d7
	: charset_attribute
Packit b099d7
	| charset_attribute_list charset_attribute
Packit b099d7
	;
Packit b099d7
Packit b099d7
charset_attribute
Packit b099d7
	: charset_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    STRING
Packit b099d7
		{ wmlAddCharsetAttribute (yytknval1, yystringval); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| predefined_charset_attribute_name
Packit b099d7
	    EQUALS
Packit b099d7
	    predefined_charset_attribute_value
Packit b099d7
		{ wmlAddCharsetAttribute (yytknval1, yytknval2); }
Packit b099d7
	    SEMICOLON
Packit b099d7
	| error { LexIssueError(SEMICOLON); } SEMICOLON
Packit b099d7
	;
Packit b099d7
Packit b099d7
charset_attribute_name
Packit b099d7
	: INTERNALLITERAL	{ yytknval1 = INTERNALLITERAL; }
Packit b099d7
	| ALIAS			{ yytknval1 = ALIAS; }
Packit b099d7
	| XMSTRINGCHARSETNAME	{ yytknval1 = XMSTRINGCHARSETNAME; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
predefined_charset_attribute_name
Packit b099d7
	: DIRECTION		{ yytknval1 = DIRECTION; }
Packit b099d7
	| PARSEDIRECTION	{ yytknval1 = PARSEDIRECTION; }
Packit b099d7
	| CHARACTERSIZE		{ yytknval1 = CHARACTERSIZE; }
Packit b099d7
	;
Packit b099d7
Packit b099d7
predefined_charset_attribute_value
Packit b099d7
	: LEFTTORIGHT		{ yytknval2 = LEFTTORIGHT; }
Packit b099d7
	| RIGHTTOLEFT		{ yytknval2 = RIGHTTOLEFT; }
Packit b099d7
	| ONEBYTE		{ yytknval2 = ONEBYTE; }
Packit b099d7
	| TWOBYTE		{ yytknval2 = TWOBYTE; }
Packit b099d7
	| MIXED1_2BYTE		{ yytknval2 = MIXED1_2BYTE; }
Packit b099d7
        ;
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Other productions
Packit b099d7
 */
Packit b099d7
name
Packit b099d7
	: STRING
Packit b099d7
		{ strcpy (yynameval, (XmConst char *)yystringval); }
Packit b099d7
	;
Packit b099d7
Packit b099d7
%%
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Dummmy error routine, since we output our own.
Packit b099d7
 */
Packit b099d7
int yyerror (s)
Packit b099d7
char *s;
Packit b099d7
{
Packit b099d7
	return 0;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
#include "wmllex.c"
Packit b099d7