Regular Expression için Algoritma

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.

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;
    }
}
 

Dosya Ekleri

  • HW3 (1).pdf
    431,7 KB · Görüntüleme: 224
Uyarı! Bu konu 7 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı