Regular Expression için Algoritma

Katılım
23 Ekim 2017
Mesajlar
2.161
Çözümler
15
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: 276
Uyarı! Bu konu 8 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.

Technopat Haberler

Yeni konular

Geri
Yukarı