Skip to content

Commit

Permalink
Parseur pour fichier sous titre olfactifs Scentys
Browse files Browse the repository at this point in the history
  • Loading branch information
ARO17 committed Apr 12, 2013
1 parent f61cc12 commit 74f584d
Show file tree
Hide file tree
Showing 45 changed files with 5,605 additions and 0 deletions.
18 changes: 18 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/changes.txt
@@ -0,0 +1,18 @@
v.0.10 :
- Parseur de fichier sous-titre Scentys.
- Format du fichier :
- [hh:[mm:]]ss = fragId, groupId
- [hh:[mm:]]ss -> fragId, groupId
- [hh:[mm:]]ss -> FfragId, GgroupId
- [hh:[mm:]]ss -> FfragId GgroupId

v.0.20 :
- Ajout d'un temps pour stopper la fragrance.
- Format du fichier :
- [hh:[mm:]]ss - [hh:[mm:]]ss = fragId, groupId

v.0.30 :
- Modification du format de fichier sts :
- [[hh:]mm:]ss -> [[hh:]mm:]ss = fragId, groupId
- Lorsqu'un champ n'est pas renseigné (heure ou minute)
on lui attribut la valeur 0 au lieu de la valeur -1.
24 changes: 24 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/Makefile
@@ -0,0 +1,24 @@
CFLAGS = -Wall
LDFLAGS = -lfl -ly

all: sts_parser.y.h main.o sts_parser.l.o sts_parser.y.o
gcc ${CFLAGS} -o sts_parser main.o sts_parser.y.o sts_parser.l.o ${LDFLAGS}
clean:
rm -f *.o
rm -f sts_parser.l.c sts_parser.y.c sts_parser.y.h
rm -f sts_parser

sts_parser.l.o: sts_parser.l.c
gcc -c ${CFLAGS} sts_parser.l.c

sts_parser.y.o: sts_parser.y.c
gcc -c ${CFLAGS} sts_parser.y.c

sts_parser.l.c: sts_parser.lex
flex --yylineno sts_parser.lex ; mv -f lex.yy.c sts_parser.l.c

sts_parser.y.c: sts_parser.y
bison -y -d sts_parser.y ; mv -f y.tab.c sts_parser.y.c; mv -f y.tab.h sts_parser.y.h

sts_parser.y.h: sts_parser.y
bison -y -d sts_parser.y ; mv -f y.tab.c sts_parser.y.c; mv -f y.tab.h sts_parser.y.h
64 changes: 64 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/barfoo.sts
@@ -0,0 +1,64 @@
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3
12:21:00 -> F2 G4
12:21:00 -> F6 G8
10 = F2
1:00 -> -2
5 changes: 5 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/error.sts
@@ -0,0 +1,5 @@
23:00 = F8 G4
*%+°@
#rjrjrjrjr
2=3
6 changes: 6 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/foo.bar
@@ -0,0 +1,6 @@
12:30=2
13:40=2,3
12->F1 G2
1:23:45 = F2,G4
34 -> G2 f3

32 changes: 32 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/main.c
@@ -0,0 +1,32 @@
#include <stdio.h>
#include <stdlib.h>
#include "sts_parser.h"

int
main(int argc, char *argv[])
{
Commands_array *cmd_array = NULL;
int i;

if (argc != 2) {
fprintf(stderr, "usage: %s filename\n", argv[0]);
exit(1);
}
else
cmd_array = loadSubtitleFile(argv[1]);

if (cmd_array)
{
for (i = 0; i < cmd_array->used; i++) {
printf ("Command %d: Play fragrance %d of group %d at %d hour, %d minute(s) and %d seconde(s)\n",
i,
cmd_array->cmd_line[i].fragrance,
cmd_array->cmd_line[i].group,
cmd_array->cmd_line[i].hour,
cmd_array->cmd_line[i].minute,
cmd_array->cmd_line[i].seconde);
}
}

exit(0);
}
21 changes: 21 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/scentys_subtitle.sts
@@ -0,0 +1,21 @@
F1
00:00:03 = 1,2
00:00:12 = 0,2

# un com
00:00:00 = 1,2 # un autre
00:00:00 = 1
00:00 = 1
00 = 1

;00:00:00 : 1 - 2
;00:00:00 : 1
;00:00 : 1
;00 : 1

;00:00:00 : F1 G2
;00:00:00 : F1 - G2
;00:00:00 : F1
;00:00:00 : playFragrance(1)
;00:00 : F1
;00 : F1
27 changes: 27 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/sts_parser.h
@@ -0,0 +1,27 @@
typedef struct
{
int hour;
int minute;
int seconde;
int fragrance;
int group;
}
Command_line;

typedef struct
{
Command_line *cmd_line;
size_t used; /* items number */
size_t size; /* total size allocated */
}
Commands_array;

int initArray(Commands_array *cmd_array, size_t initialSize);

int insertElement(Commands_array *cmd_array, Command_line *element);

void freeArray(Commands_array *cmd_array);

void initCommandLine(Command_line *cmd_line);

Commands_array *loadSubtitleFile(char *subtitle_file_name);
36 changes: 36 additions & 0 deletions c_programming/lex_yacc/sts_file_parser/v.0.10/sts_parser.lex
@@ -0,0 +1,36 @@
%option nounput

%{

#include "sts_parser.y.h"

%}


blank [ \t]+
digit [0-9]
number {digit}+


%%

{blank} ; /* Do nothing */
[A-Z] ;
[a-z] ;
#.*$ ;

{number} { yylval.integer = atoi(yytext); return(NUMBER); }
[Ff]{number} { yylval.string = yytext; return(FRAG); }
[Gg]{number} { yylval.string = yytext; return(GROUP); }
":" { return(COLON); }
"," { return(COMMA); }
"=" { return(ASSIGN); }
"->" { return(ASSIGN); }
"\n" { return(EOL); }
"\r" { return(EOL); }
"\r\n" { return(EOL); }
<<EOF>> { return 0 ; }
. ;


%%

0 comments on commit 74f584d

Please sign in to comment.