Napstablook
Kilopat
- Katılım
- 23 Ekim 2017
- Mesajlar
- 1.574
- Çözümler
- 13
Daha fazla
- Cinsiyet
- Erkek
Arkadaşlar Formal Languages and Automatons (Biçimsel Diller ve Otomatlar) dersinde Regular Expression için bir program yazmamız istendi. Ancak burada ben nasıl bir algoritma düşüneceğimi bulamadım.
Bu program ne yapacak?
Kullanıcıdan Regular Expression'ı ve input'ı alacak. Eğer input, Regular Expression' a uyarsa program output olarak "ACCEPT" yazacak, uymazsa "REJECT" yazacak.
Örnek:
Enter Expressionand Input: 01* 01111
ACCEPT
Bahsi geçen program: HW3.pdf
Bu dersi almış olan arkadaşlarımız bana yardımcı olursa sevinirim.
Güncelleme
C++ dilinde yazdım. Eğer isteyen varsa kodlara bakabilir. Ancak program tam değil. Bazı Regular Expression' ları tanıyamıyor. "ACCEPT" döndürmesi gerekirken "REJECT" döndürüyor.
Bu program ne yapacak?
Kullanıcıdan Regular Expression'ı ve input'ı alacak. Eğer input, Regular Expression' a uyarsa program output olarak "ACCEPT" yazacak, uymazsa "REJECT" yazacak.
Örnek:
Enter Expressionand Input: 01* 01111
ACCEPT
Bahsi geçen program: HW3.pdf
Bu dersi almış olan arkadaşlarımız bana yardımcı olursa sevinirim.
Güncelleme
C++ dilinde yazdım. Eğer isteyen varsa kodlara bakabilir. Ancak program tam değil. Bazı Regular Expression' ları tanıyamıyor. "ACCEPT" döndürmesi gerekirken "REJECT" döndürüyor.
Kod:
#include <iostream>
#include <string>
using namespace std;
bool isMatch(string s, string p);
int main(void)
{
bool check;
string re, in;
//cout<<"Enter Regular Expression and Input: ";
cin>>re>>in;
check=isMatch(in,re);
if(check==true)
cout<<"ACCEPT";
else if(check==false)
cout<<"REJECT";
return 0;
}
bool isMatch(string input, string regex)
{
if (regex.empty()) return input.empty();
if (regex[1] != '*')
{
if(input[0] == regex[0] || (regex[0] == '.' && input[0] != '\\0'))
return isMatch(input.substr(1), regex.substr(1));
else
return false;
}
else
{
if (isMatch(input, regex.substr(2)))
return true;
int index = 0;
while (index < input.size() && (input[index] == regex[0] || regex[0] == '.'))
{
if (isMatch(input.substr(++index), regex.substr(2)))
return true;
}
return false;
}
}