From 83ebe37270eeb9f2a69f655def2cdff5a70a86a3 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Thu, 14 Oct 2021 18:00:27 +0200 Subject: [PATCH] tentatives de strategie de parsing --- README.md | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 209 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 86aed5b..1f35c7e 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ --- +## parsing : + [methode arbre binaire :](https://fr.wikipedia.org/wiki/Arbre_binaire#Transformation_d'un_arbre_quelconque_en_un_arbre_binaire) ``` @@ -53,30 +55,221 @@ EXEMPLE : ARCHITECTURE : all + expend $ . pipes - . . redirections (program or file) + . . redirections (program function or file) . . . arguments (nom arg arg arg ...) - . . . . special characters ($) - . . . . . -EXEMPLE : . . . + . . . . +EXEMPLE : . . [sort < ./prgrm 'arg1 '$VARIABLE" arg3" | grep "word.$EXTENSION" | wc -l > file] - . [sort < ./prgrm 'arg1 '$VARIABLE" arg3"] - . . [sort] . - . . [./prgrm 'arg1 '$VARIABLE" arg3"] + [sort < ./prgrm 'arg1 'arg2" arg3" | grep "word.md" | wc -l > file] + . [sort < ./prgrm 'arg1 'arg2" arg3"] + . . [sort] + . . [./prgrm 'arg1 'arg2" arg3"] . . . [./prgrm] . . . ['arg1 '] - . . . [$VARIABLE] - . . . . [$VARIABLE] + . . . [arg2] . . . [" arg3"] - . [grep "word.$EXTENSION"] + . [grep "word.md"] . . . [grep] - . . . ["word.$EXTENSION"] - . . . . [$EXTENSION] + . . . ["word.md"] . [wc -l > file] - . . [wc -l] . - . . . [wc]. - . . . [-l]. - . . [file] . + . . [wc -l] + . . . [wc] + . . . [-l] + . . [file] +``` + +--- + +## separer arguments : + +- 'arg1 'arg2" arg3" +- 'a"r'g'"1' +- 'arg"1"'arg2'arg3' + +``` +int q; // first quote +int c; // count +int i; + +q = 0; +c = 0; +i = 0; +while (str[i]) +{ + if (str[i] == ''') + { + if (q == ''') + { + c--; + if (c == 0) + { + q = 0; + create_new_substr; + } + } + else + { + c++; + if (q == 0) + q = '''; + } + } + if (str[i] == '"') + { + if (q == '"') + { + c--; + if (c == 0) + { + q = 0; + create_new_substr; + } + } + else + { + c++; + if (q == 0) + q = '"'; + } + } + i++; +} + + + ['][a][r][g][1][ ]['][a][r][g][2]["][ ][a][r][g][3]["] +c = 0 . . . . . . . . . . . . . . . . . . +c = 1 . . . . . . . . . . . . . . . . . str[i] == ' ; q == 0 c == 0 -> c++; q = ' +c = . 1 . . . . . . . . . . . . . . . . str[i] != ' | " ; -> +c = . . 1 . . . . . . . . . . . . . . . str[i] != ' | " ; -> +c = . . . 1 . . . . . . . . . . . . . . str[i] != ' | " ; -> +c = . . . . 1 . . . . . . . . . . . . . str[i] != ' | " ; -> +c = . . . . . 1 . . . . . . . . . . . . str[i] != ' | " ; -> +c = . . . . . . 0 . . . . . . . . . . . str[i] == ' ; q == ' c == 1 -> c--; q = 0; + arg1 = [a][r][g][1][ ] +c = . . . . . . . 0 . . . . . . . . . . str[i] != ' | " ; -> +c = . . . . . . . . 0 . . . . . . . . . str[i] != ' | " ; -> +c = . . . . . . . . . 0 . . . . . . . . str[i] != ' | " ; -> +c = . . . . . . . . . . 0 . . . . . . . str[i] != ' | " ; -> +c = . . . . . . . . . . . 1 . . . . . . str[i] == " ; q != " c == 0 -> c++; q = "; + arg2 = [a][r][g][2] +c = . . . . . . . . . . . . 1 . . . . . str[i] != ' | " ; -> +c = . . . . . . . . . . . . . 1 . . . . str[i] != ' | " ; -> +c = . . . . . . . . . . . . . . 1 . . . str[i] != ' | " ; -> +c = . . . . . . . . . . . . . . . 1 . . str[i] != ' | " ; -> +c = . . . . . . . . . . . . . . . . 1 . str[i] != ' | " ; -> +c = . . . . . . . . . . . . . . . . . 0 str[i] == " ; q == " c == 1 -> c--; q = 0; + arg3 = [ ][a][r][g][3] + + ['][a]["][r]['][g][']["][1]['] +c = 0 . . . . . . . . . . +c = 1 . . . . . . . . . str[i] == ' ; q == 0 c == 0 -> c++; q = ' +c = . 1 . . . . . . . . str[i] != ' | " ; -> +c = . . 2 . . . . . . . str[i] == " ; q != " c == 1 -> c++; +c = . . . 2 . . . . . . str[i] != ' | " ; -> +c = . . . . 3 . . . . . str[i] == ' | " ; q == ' c == 2 -> c++; +c = . . . . . 3 . . . . str[i] != ' | " ; -> +c = . . . . . . 2 . . . str[i] == ' ; q == ' c == 3 -> c--; q = 0; +c = . . . . . . . 1 . . str[i] == " ; q != " c == 2 -> +ERROR ... +c = . . . . . . . . 1 . str[i] != ' | " ; -> +c = . . . . . . . . . 0 str[i] != ' | " ; -> + +-> comment le programme sait que cette fois il doit decrementer "c" ? + en retenant dans l'ordre toutes les dernieres valeurs de "q" ! +-> donc plutot partir sur une recursive + +``` + +deuxieme methode : +``` + .--------------------------------------------. + : .--------------------------------------. : + : : .--------------------------------. : : + : : : .--------. .--------. : : : + : : : .--. : .--. : : .--. : : : : + '__"__'__"__"__"__'__'__"__"__'__'__"__'__"__' + 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 + + + piege : + | | + .--. .--. v v .--. + '__"__'__"__"__"__'__'__"__"__'__'__"__'__"__' + 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 + + + .--. +1 : '__"__'__"__"__"__'__'__"__"__'__'__"__'__"__' + + .--. +2 : '__"__'________"__'__'__"__"__'__'__"__'__"__' + + .--------. +3 : '__"__'________"________"__"__'__'__"__'__"__' + + .--. +4 : '__"__'____________________"__'__'__"__'__"__' + + .--------. +5 : '__"__'____________________"________"__'__"__' + + .--------------------------------. +6 : '__"__'________________________________'__"__' + + .--------------------------------------. +7 : '__"______________________________________"__' + + .--------------------------------------------. +8 : '____________________________________________' + +``` + + + +comportement reel : + +``` +echo "_" +_ + +echo "_'_'_" +_'_'_ + +echo "_'_"_"_'_" +_'___'_ + +echo "_'_"_'_'_"_'_" +_'_____'_ + +echo "_'_"_'_"_"_'_"_'_" +_'___"_"___'_ + +echo "_'_"_"_"_"_'_" +_'_____'_ + +echo "_'_"_'_"_"_"_"_'_"_'_" +_'___"_"_"_"___'_ + +echo "_'_"_'_"_'_'_"_'_"_'_" +_'___"___"___'_ + +echo "_'_"_'_"_'_"_"_'_"_'_"_'_" +_'___"_____"___'_ + +echo "_'_"_'_"_'_"_'_'_"_'_"_'_"_'_" +_'___"___'_'___"___'_ + +echo "_'_"_'_"_'_"_'_"_"_'_"_'_"_'_"_'_" +_'___"___'___'___"___'_ + +echo "_'_"_'_"_'_"_'_"_'_'_"_'_"_'_"_'_"_'_" +_'___"___'_____'___"___'_ + +echo "_'_"_'_"_'_"_'_"_'_"_"_'_"_'_"_'_"_'_"_'_" +_'___"___'___"_"___'___"___'_ + ``` ---