From 28afa9c2ae714296cd890bb9277921a815c31d05 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 9 Mar 2019 21:00:48 +0000 Subject: [PATCH] libpakfire: parser: Read variable assignments Signed-off-by: Michael Tremer --- src/libpakfire/parser/grammar.y | 72 ++++++++++++++++++++++++++++----- src/libpakfire/parser/scanner.l | 14 +++++-- 2 files changed, 74 insertions(+), 12 deletions(-) diff --git a/src/libpakfire/parser/grammar.y b/src/libpakfire/parser/grammar.y index 91f45a0de..cba846bae 100644 --- a/src/libpakfire/parser/grammar.y +++ b/src/libpakfire/parser/grammar.y @@ -42,19 +42,73 @@ static void yyerror(const char* s); %token END %token NEWLINE %token TAB -%token VARIABLE -%token VALUE +%token VARIABLE +%token VALUE %token WHITESPACE -%% +%type variable; +%type value; + +%union { + char* string; +} -top : top empty - | empty - ; +%% -empty : WHITESPACE NEWLINE - | NEWLINE - ; +top : top empty + | top block + | empty + | block + ; + +empty : WHITESPACE NEWLINE + | NEWLINE + ; + +// Optional whitespace +whitespace : WHITESPACE + | /* empty */ + ; + +variable : VARIABLE + { + $$ = $1; + }; + +value : VALUE + | variable + { + $$ = $1; + } + | /* empty */ + { + $$ = NULL; + }; + +block_opening : variable NEWLINE + { + printf("BLOCK OPEN: %s\n", $1); + }; + +block_closing : END NEWLINE + { + printf("BLOCK CLOSED\n"); + } + +block : block_opening assignments block_closing + { + printf("BLOCK FOUND\n"); + }; + +assignments : assignments assignment + | assignments empty + | /* empty */ + ; + +assignment : whitespace variable whitespace ASSIGN whitespace value whitespace NEWLINE + { + printf("ASSIGNMENT FOUND: %s = %s\n", $2, $6); + }; %% diff --git a/src/libpakfire/parser/scanner.l b/src/libpakfire/parser/scanner.l index 21db9800d..1c36a8df8 100644 --- a/src/libpakfire/parser/scanner.l +++ b/src/libpakfire/parser/scanner.l @@ -25,6 +25,7 @@ int num_lines; +#include #include "grammar.h" %} @@ -33,7 +34,7 @@ letter [A-Za-z] underscore _ variable {letter}({digit}|{letter}|{underscore})+ whitespace ([ \t])+ -string [a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\]+ +string [a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\/]+ %% @@ -48,7 +49,14 @@ string [a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\]+ "def" { return DEFINE; } "end" { return END; } -{variable} { return VARIABLE; } -{string} { return VALUE; } +{variable} { + yylval.string = pakfire_strdup(yytext); + return VARIABLE; + } + +{string} { + yylval.string = pakfire_strdup(yytext); + return VALUE; + } %% -- 2.39.5