1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 /* yacc file for parsing PKCS #11 module installation instructions */
6 /*------------------------ Definition Section ---------------------------*/
7 
8 %{
9 #define yyparse Pk11Install_yyparse
10 #define yylex Pk11Install_yylex
11 #define yyerror Pk11Install_yyerror
12 #define yychar Pk11Install_yychar
13 #define yyval Pk11Install_yyval
14 #define yylval Pk11Install_yylval
15 #define yydebug Pk11Install_yydebug
16 #define yynerrs Pk11Install_yynerrs
17 #define yyerrflag Pk11Install_yyerrflag
18 #define yyss Pk11Install_yyss
19 #define yyssp Pk11Install_yyssp
20 #define yyvs Pk11Install_yyvs
21 #define yyvsp Pk11Install_yyvsp
22 #define yylhs Pk11Install_yylhs
23 #define yylen Pk11Install_yylen
24 #define yydefred Pk11Install_yydefred
25 #define yydgoto Pk11Install_yydgoto
26 #define yysindex Pk11Install_yysindex
27 #define yyrindex Pk11Install_yyrindex
28 #define yygindex Pk11Install_yygindex
29 #define yytable Pk11Install_yytable
30 #define yycheck Pk11Install_yycheck
31 #define yyname Pk11Install_yyname
32 #define yyrule Pk11Install_yyrule
33 
34 /* C Stuff */
35 #include "install-ds.h"
36 #include <prprf.h>
37 
38 #define YYSTYPE Pk11Install_Pointer
39 extern char *Pk11Install_yytext;
40 char *Pk11Install_yyerrstr=NULL;
41 
42 %}
43 
44 /* Tokens */
45 %token OPENBRACE
46 %token CLOSEBRACE
47 %token STRING
48 %start toplist
49 
50 %%
51 
52 /*--------------------------- Productions -------------------------------*/
53 
54 toplist		: valuelist
55 {
56 	Pk11Install_valueList = $1.list;
57 }
58 
59 valuelist	: value valuelist
60 {
61 	Pk11Install_ValueList_AddItem($2.list,$1.value);
62 	$$.list = $2.list;
63 }
64 |
65 {
66 	$$.list = Pk11Install_ValueList_new();
67 };
68 
69 value		: key_value_pair
70 {
71 	$$.value= Pk11Install_Value_new(PAIR_VALUE,$1);
72 }
73 | STRING
74 {
75 	$$.value= Pk11Install_Value_new(STRING_VALUE, $1);
76 };
77 
78 key_value_pair	: key OPENBRACE valuelist CLOSEBRACE
79 {
80 	$$.pair = Pk11Install_Pair_new($1.string,$3.list);
81 };
82 
83 key			: STRING
84 {
85 	$$.string = $1.string;
86 };
87 
88 %%
89 /*----------------------- Program Section --------------------------------*/
90 
91 /*************************************************************************/
92 void
93 Pk11Install_yyerror(char *message)
94 {
95 	char *tmp;
96 	if(Pk11Install_yyerrstr) {
97 		tmp=PR_smprintf("%sline %d: %s\n", Pk11Install_yyerrstr,
98 			Pk11Install_yylinenum, message);
99 		PR_smprintf_free(Pk11Install_yyerrstr);
100 	} else {
101 		tmp = PR_smprintf("line %d: %s\n", Pk11Install_yylinenum, message);
102 	}
103 	Pk11Install_yyerrstr=tmp;
104 }
105