PDA

View Full Version : کمک در جدا کردن کلمات یک رشته



Cessna182
سه شنبه 26 مهر 1390, 09:33 صبح
دوستان می خوام برنامه ای برای درس کامپایلر بنویسم که بتونم کلمات یک رشته رو بررسی کنم و تک تکشون رو بررسی کنم و ببینم که آیا این کلمه ها متغیر، کلمه کلیدی مانند if یا عدد هستند یا نه؟

چطوری می تونم تک تک این کلمات رو از توی رشته بخونم و داخل یک متغیر دیگه بریزم؟ ایا تابع خاصی برای این منظور هست؟

mehdi.mousavi
سه شنبه 26 مهر 1390, 11:27 صبح
دوستان می خوام برنامه ای برای درس کامپایلر بنویسم که بتونم کلمات یک رشته رو بررسی کنم و تک تکشون رو بررسی کنم و ببینم که آیا این کلمه ها متغیر، کلمه کلیدی مانند if یا عدد هستند یا نه؟ چطوری می تونم تک تک این کلمات رو از توی رشته بخونم و داخل یک متغیر دیگه بریزم؟ ایا تابع خاصی برای این منظور هست؟

سلام.
جدا کردن کلمات موجود در یک رشته کار دشواری نیست. با فرض اینکه Space رو جدا کننده دو کلمه از هم بدونیم، می تونیم بدین شکل عمل کنیم:


MatchCollection coll = Regex.Matches(@"this is my statement in question", @"\w+");
foreach (Match match in coll)
{
string word = match.Value;
}

اما مشکل اصلی جدا کردن کلمات نیست. ساخت درخت AST (http://en.wikipedia.org/wiki/Abstract_syntax_tree) هستش، یا بسته به نیاز، درخت CST (http://en.wikipedia.org/wiki/Concrete_syntax_tree). خوشبختانه برای هر دو مورد، قبلا کارهای خوبی انجام شده و نیازی نیست از ابتدا همه اون کارها انجام بشه. بطور نمونه برای تبدیل کد C# به AST، می تونید از Expression Tree (http://msdn.microsoft.com/en-us/library/bb397951.aspx) ها استفاده کنید. البته قاعدتا از شما خواسته شده تا خودتون Parser مربوطه رو بنویسید، نه اینکه از Parser های آماده استفاده کنید. به همین دلیل، می تونید به C# Parser (http://csparser.codeplex.com/) که پروژه ای Open Source هست مراجعه کنید. در هر حال، برای مشاهده لیست برخی از این Parser های Open Source می تونید به این آدرس رجوع کنید (http://stackoverflow.com/questions/81406/parser-for-c-sharp/2214810).

موفق باشید.