From 54c57114533936d7255c19e4c1b99afa44473a3c Mon Sep 17 00:00:00 2001 From: Zoviet Date: Sat, 6 Dec 2025 14:03:49 +0400 Subject: [PATCH] init --- LICENSE | 2 +- README.md | 40 +++++++++++++++++++++++++++++++++-- filter | Bin 0 -> 31712 bytes filter.l | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ test.txt | 1 + 5 files changed, 101 insertions(+), 3 deletions(-) create mode 100755 filter create mode 100644 filter.l create mode 100644 test.txt diff --git a/LICENSE b/LICENSE index a0bf6f4..b5520a3 100644 --- a/LICENSE +++ b/LICENSE @@ -75,7 +75,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - phones_filter Copyright (C) 19yy Datenlabor + less Copyright (C) 19yy Datenlabor This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. diff --git a/README.md b/README.md index 37eba0c..29e58d3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,39 @@ -# phones_filter +# Лексический анализатор российских мобильных номеров + +Лексический анализатор для фильтрования сообщений с номерами телефонов российских мобильных номеров, введенных любым способом: цифрами, словами, вперемежку словами и цифрами. + +Флаг определения номера после анализа - наличие паттерна кода оператора. + +Если номер найден, возвращается ошибка и номер телефона в национальном формате без кода страны. Например: (937) 987-58-42. + + +## Компиляция: + +С использованием Flex (Потребуется пакет libfl-dev): + +``` +lex filter.l +gcc -o filter -lfl lex.yy.c + +``` + +C использованием Lex: + +``` +lex filter.l +cc -o filter -ll lex.yy.c + +``` + +## Тест + +``` +./filter < test.txt + +``` + +Тестовое сообщение: девять 3 семь восемь 8 шесть 58 четыре два + + + -Лексический анализатор для поиска и фильтрации российских мобильных номеров в тексте \ No newline at end of file diff --git a/filter b/filter new file mode 100755 index 0000000000000000000000000000000000000000..d498a026f98c7cee31811f0971fa5e4db8a229ef GIT binary patch literal 31712 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 OPpRwq0WJYoR{S?lmfC*+ literal 0 HcmV?d00001 diff --git a/filter.l b/filter.l new file mode 100644 index 0000000..76d4f4d --- /dev/null +++ b/filter.l @@ -0,0 +1,61 @@ +%{ + + int n = 0; + int numbers[110]; + int code = 0; + + int codes[73] = {900,902,903,904,905,906,908,909,950,951, + 953,960,961,962,963,964,965,966,967,968,969,980,983,986, + 901,910,911,912,913,914,915,916,917,918,919,978,981,982, + 984,985,495,987,988,989,920,921,922,923,924,925,926,927, + 928,929,930,931,932,933,934,936,937,938,939,999,952,958, + 977,991,992,993,994,995,996}; + +%} + +%% + +[0-9] n++; numbers[n]=atoi(yytext); +("\xd1\x81"|"\xd0\xa1")("\xd1\x82\xd0\xbe") n++; numbers[n]=1; +("\xd0\xbe"|"\xd0\x9e")("\xd0\xb4\xd0\xb8\xd0\xbd") n++; numbers[n]=1; +("\xd0\xb4"|"\xd0\x94")("\xd0\xb2\xd0\xb0") n++; numbers[n]=2; +("\xd0\xb4"|"\xd0\x94")("\xd0\xb2\xd0\xb5") n++; numbers[n]=2; +("\xd1\x82"|"\xd0\xa2")("\xd1\x80\xd0\xb8") n++; numbers[n]=3; +("\xd1\x87"|"\xd0\xa7")("\xd0\xb5\xd1\x82\xd1\x8b\xd1\x80") n++; numbers[n]=4; +("\xd1\x81"|"\xd0\xa1")("\xd0\xbe\xd1\x80\xd0\xbe\xd0\xba") n++; numbers[n]=4; +("\xd0\xbf"|"\xd0\x9f")("\xd1\x8f\xd1\x82") n++; numbers[n]=5; +("\xd1\x88"|"\xd0\xa8")("\xd0\xb5\xd1\x81\xd1\x82") n++; numbers[n]=6; +("\xd1\x81"|"\xd0\xa1")("\xd0\xb5\xd0\xbc") n++; numbers[n]=7; +("\xd0\xb2"|"\xd0\x92")("\xd0\xbe\xd1\x81\xd0\xb5\xd0\xbc") n++; numbers[n]=8; +("\xd0\xb4"|"\xd0\x94")("\xd0\xb5\xd0\xb2\xd1\x8f") n++; numbers[n]=9; +("\xd0\x94"|"\xd0\xb4")("\xd0\xb5\xd1\x81\xd1\x8f\xd1\x82\xd1\x8c") n++; numbers[n]=1; n++; numbers[n]=0; +("\xd0\x9e"|"\xd0\xbe")("\xd0\xb4\xd0\xb8\xd0\xbd\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1; n++; numbers[n]=1; +("\xd0\x94"|"\xd0\xb4")("\xd0\xb2\xd0\xb5\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1; n++; numbers[n]=2; +("\xd0\xa2"|"\xd1\x82")("\xd1\x80\xd0\xb8\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1;n++; numbers[n]=3; +("\xd0\xa7"|"\xd1\x87")("\xd0\xb5\xd1\x82\xd1\x8b\xd1\x80\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1;n++; numbers[n]=4; +("\xd0\x9f"|"\xd0\xbf")("\xd1\x8f\xd1\x82\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1;n++; numbers[n]=5; +("\xd0\xa8"|"\xd1\x88")("\xd0\xb5\xd1\x81\xd1\x82\xd0\xbd\xd0\xb0\xd0\xb4\xd1\x86") n++; numbers[n]=1;n++; numbers[n]=6; +("\xd0\xa1"|"\xd1\x81")("\xd0\xb5\xd0\xbc\xd0\xbd\xd0\xb0\xd0\xb4\xd1\x86") n++; numbers[n]=1;n++; numbers[n]=7; +("\xd0\x92"|"\xd0\xb2")("\xd0\xbe\xd1\x81\xd0\xb5\xd0\xbc\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1;n++; numbers[n]=8; +("\xd0\x94"|"\xd0\xb4")("\xd0\xb5\xd0\xb2\xd1\x8f\xd1\x82\xd1\x8c\xd0\xbd\xd0\xb0\xd0\xb4") n++; numbers[n]=1;n++; numbers[n]=9; +("\xd0\x94"|"\xd0\xb4")("\xd0\xb2\xd0\xb0\xd0\xb4") n++; numbers[n]=2;n++; numbers[n]=0; +\n +. + +%% +int main() +{ + yylex(); + for(int i=0; i<=n; i++) { + if (numbers[i]==9 && (n-i)>8) { + code = 900 + numbers[i+1]*10 + numbers[i+2]; + for(int j=0; j<=73; j++) { + if (codes[j]==code) { + printf( "(%d) %d%d%d-%d%d-%d%d", code, numbers[i+3],numbers[i+4],numbers[i+5],numbers[i+6],numbers[i+7],numbers[i+8],numbers[i+9]); + exit(EXIT_FAILURE); + } + } + } + } + exit(EXIT_SUCCESS); +} diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..cb39fa3 --- /dev/null +++ b/test.txt @@ -0,0 +1 @@ +девять 3 семь восемь 8 шесть 58 четыре два