michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* yacc file for parsing PKCS #11 module installation instructions */ michael@0: /*------------------------ Definition Section ---------------------------*/ michael@0: michael@0: %{ michael@0: #define yyparse Pk11Install_yyparse michael@0: #define yylex Pk11Install_yylex michael@0: #define yyerror Pk11Install_yyerror michael@0: #define yychar Pk11Install_yychar michael@0: #define yyval Pk11Install_yyval michael@0: #define yylval Pk11Install_yylval michael@0: #define yydebug Pk11Install_yydebug michael@0: #define yynerrs Pk11Install_yynerrs michael@0: #define yyerrflag Pk11Install_yyerrflag michael@0: #define yyss Pk11Install_yyss michael@0: #define yyssp Pk11Install_yyssp michael@0: #define yyvs Pk11Install_yyvs michael@0: #define yyvsp Pk11Install_yyvsp michael@0: #define yylhs Pk11Install_yylhs michael@0: #define yylen Pk11Install_yylen michael@0: #define yydefred Pk11Install_yydefred michael@0: #define yydgoto Pk11Install_yydgoto michael@0: #define yysindex Pk11Install_yysindex michael@0: #define yyrindex Pk11Install_yyrindex michael@0: #define yygindex Pk11Install_yygindex michael@0: #define yytable Pk11Install_yytable michael@0: #define yycheck Pk11Install_yycheck michael@0: #define yyname Pk11Install_yyname michael@0: #define yyrule Pk11Install_yyrule michael@0: michael@0: /* C Stuff */ michael@0: #include "install-ds.h" michael@0: #include michael@0: michael@0: #define YYSTYPE Pk11Install_Pointer michael@0: extern char *Pk11Install_yytext; michael@0: char *Pk11Install_yyerrstr=NULL; michael@0: michael@0: %} michael@0: michael@0: /* Tokens */ michael@0: %token OPENBRACE michael@0: %token CLOSEBRACE michael@0: %token STRING michael@0: %start toplist michael@0: michael@0: %% michael@0: michael@0: /*--------------------------- Productions -------------------------------*/ michael@0: michael@0: toplist : valuelist michael@0: { michael@0: Pk11Install_valueList = $1.list; michael@0: } michael@0: michael@0: valuelist : value valuelist michael@0: { michael@0: Pk11Install_ValueList_AddItem($2.list,$1.value); michael@0: $$.list = $2.list; michael@0: } michael@0: | michael@0: { michael@0: $$.list = Pk11Install_ValueList_new(); michael@0: }; michael@0: michael@0: value : key_value_pair michael@0: { michael@0: $$.value= Pk11Install_Value_new(PAIR_VALUE,$1); michael@0: } michael@0: | STRING michael@0: { michael@0: $$.value= Pk11Install_Value_new(STRING_VALUE, $1); michael@0: }; michael@0: michael@0: key_value_pair : key OPENBRACE valuelist CLOSEBRACE michael@0: { michael@0: $$.pair = Pk11Install_Pair_new($1.string,$3.list); michael@0: }; michael@0: michael@0: key : STRING michael@0: { michael@0: $$.string = $1.string; michael@0: }; michael@0: michael@0: %% michael@0: /*----------------------- Program Section --------------------------------*/ michael@0: michael@0: /*************************************************************************/ michael@0: void michael@0: Pk11Install_yyerror(char *message) michael@0: { michael@0: char *tmp; michael@0: if(Pk11Install_yyerrstr) { michael@0: tmp=PR_smprintf("%sline %d: %s\n", Pk11Install_yyerrstr, michael@0: Pk11Install_yylinenum, message); michael@0: PR_smprintf_free(Pk11Install_yyerrstr); michael@0: } else { michael@0: tmp = PR_smprintf("line %d: %s\n", Pk11Install_yylinenum, message); michael@0: } michael@0: Pk11Install_yyerrstr=tmp; michael@0: }