• مشکی
  • سفید
  • سبز
  • آبی
  • قرمز
  • نارنجی
  • بنفش
  • طلایی
تعداد مطالب : 3
تعداد نظرات : 1
زمان آخرین مطلب : 6797روز قبل
موبایل
چكیده:


ظاهرا برای مایكروسافت، برای از میدان به در كردن گوگل، راهی به جز شراكت با یاهو نمانده است. آغاز این حركت را می‌شد از برقراری ارتباط بین Yahoo Messenger و MSN Messenger حدس زد. ولی، با توجه به وجه مشترك خدماتی كه هر دو شركت ارایه می‌كنند، آیا چنین پیوندی میسر است؟

كلید واژه:

یاهو، مایكروسافت، گوگل، موتور جستجو
Yahoo, Microsoft, Google, Search engine

در خبر آمده است كه مایكروسافت، برای به زمین زدن گوگل قصد دارد با یاهو به مشاركت بپردازد. طبق خبر درج شده در نیویورك پست، مایكروسافت از یاهو درخواست كرده است كه وارد مذاكره‌ای شود كه نتیجه آن می‌تواند یك معامله 50 میلیارد دلاری باشد. این در حالی است كه سرمایه بازاری یاهو 38 میلیارد دلار است. گرچه، تا به حال هر دو شركت این خبر را تكذیب كرده‌اند، با این حال به نظر وال‌استریت ژورنال، مدیران ارشد این دو شركت در مورد نوعی شراكت یا حتی خرید، با یكدیگر مذاكراتی داشته‌اند. به عقیده دیوید هالرمن، تحلیل‌گر ارشد گروه eMarketer، "تركیب این دو شركت به دلیل فرهنگ كاری متفاوت و خدمات یكسانی كه ارایه می‌كنند، كمی بعید به نظر می‌رسد. برای مایكروسافت بهتر است یك شركت تبلیغاتی موفق را خریداری كند، مانند كاری كه AOL با خرید فناوری و نیروی انسانی Advertising.com انجام داد. از طرف دیگر یاهوممكن است، به عنوان یك واحد از مایكروسافت، انعطاف لازم برای رقابت را از دست بدهد."
از سوی دیگر به عقیده كارشناسان قوانین ضد انحصار قوه قضاییه و كمیسیون ملی تجاریت آمریكا، با حذف یاهو از میدان مبارزه، مایكروسافت و گوگل تنها بازیگران صحنه خواهند بود. بنا بر شواهد تاریخی ضد انحصار ، تبدیل 3 به 2 نوعی تركیب جادویی است.
مایكروسافت از سوی گوگل كه با خرید DoubleClick سهام خود را به 1/3 میلیارد دلار خواهد رساند، به شدت احساس خطر می‌كند. مایكروسافت در بازار موتورهای جستجوی وب، بلافاصله پس از گوگل و یاهو قرار دارد و به سختی در تلاش است كه این فاصله را كم كند. از طرف دیگر، گوگل با ارایه مجموعه‌ای وب‌محور كه در حال تبدیل شدن به رقیب سرسختی برای مجموعه مایكروسافت آفیس می‌باشد، بازار خدمات دفتری مایكروسافت را تهدید می‌كند. چندی پیش، هر دو شركت در صدد برآمدند كه سهمی از بازار جستجوی AOL را خریداری كنند، كه در نهایت گوگل با پیشنهاد یك میلیارد دلار در ازای 5% از سهام AOL، این بازی را برد.
در این بازار داغ خرید و فروش شركت‌ها، یاهو نیز بیكار نمانده و با خرید 80% سهام شركت تبلیغات اینترنتی Right Media، به مبلغ 680 میلیون دلار، قصد در افزایش ارزش بازار خود دارد. در بازار بورس، در حالی كه سهام یاهو با 80/2 دلار افزایش به رقم 98/30 رسیده (تقریبا معادل 10% افزایش)، سهام مایكروسافت با كاهشی 41 سنتی، به 56/30 سقوط كرده است.
چهارشنبه 14/9/1386 - 3:50
موبایل
چكیده:
این روزها Rss بشدت در دنیای Online محبوب می‌باشد. البته جای تعجب نیست، به خاطر اینكه راه بسیار عالی برای دریافت آخرین اخبار ، تغییرات وب لاگ ها و دیگر محتویات مورد علاقه توسط كاربران می‌باشد. اگر شما می‌خواهید برای سایت خود Rss بسازید، پس به خواندن ادامه دهید.
كلید واژه:
Rss - Feec
 
Rss چیست؟
احتمالا شما می‌دانید، كه چیست: اما به سادگی می‌توان گفت: Really Simple Syndication (معادل فارسی آن شاید: همگام سازی بسیار راحت) كه تنها یك فایل Xml آماده شده توسط سرور می‌باشد كه به طور معمول شامل اخبار، قیمت سهام و مانند اینها می‌باشد.
برنامه هایی كه می‌توانند RSS‌ بخوانند ، همانند SharpReader، این فایل ها را می‌خوانند و عنوان و محتویات آن ها را نشان می‌دهند. با استفاده از این ابزارها می‌توانید تمام اخبار و اطلاعات سایتهایی را كه در آنها عضو[1]هستید را ببینید.
در این مقاله ما به ساخت Rss با استفاده از صفحات Asp.net و زبان C# می‌پردازیم. ما همچنین به یك بانك اطلاعاتی Sql Server برای نگاهداری اطلاعات خود نیاز خواهیم داشت.
 
طرح جداول بانك اطلاعاتی
در ابتدا، ما بانك اطلاعاتی با مقداری اطلاعات در آن نیاز داریم. برای این كار ما از جدولی با ساختار زیر استفاده خواهیم كرد.
Field name
Field Type
Notes
id
Unique integer
ID
headline
VarChar field, 75 طول
عنوان
story_text
Text field
متن
 
 
اگر بانك اطلاعاتی را از ابتدا می‌سازید، اطمینان حاصل كنید كه در این جدول اطلاعاتی وجود دارد، به خاطر داشته باشید كه ستون HeadLine اولین و پربیننده ترین ستون شما می‌باشد.
هنگامی‌كه شما جدول بالا را داشته باشید (بگذارید از این به بعد آن را tbl_Stories بنامیم)، می‌توانیم صفحه asp.net بسازیم كه اقدام به خدمات دهی برای ما خواهد كرد.
ساخت صفحات
در این پروژه دو فایل وجود خواهد داشت، یكی از آنها كنترل repeater خواهد داشت كه داده ها را در فایل XML قرار می‌دهد. و دگیری صفحه كد[2] برنامه می‌باشد كه طبیعتا منطق كنترل كار ودریافت اطلاعات را در آن خواهد بود.
ابتدا یك صفحه با نام rss.aspx  بسازید. همان صفحه‌ای كه كنترل repeater را خواهد داشت و كاربران شما با برنامه هایشان به آن اشاره می‌كنند.
در بالاترین بخش سایت خود خط زیر را بنویسید. این "خط تعریف صفحه[3]" می‌باشد و به صفحه می‌گوید كه چگونه رفتار كند.
<%@ Page language="c#" CodeFile="rss.aspx.cs"
 ContentType="text/xml" AutoEventWireup="false" Inherits="SyndicationDemo"%>
برای افرادی كه برنامه نویسی وب انجام داده باشند، خط بالا بسیار روشن می‌باشد. تنها بخش مهم ContentType  می‌باشد. برای صفحات عادی مقدار این گزینه  html‌می‌باشد اما شما می‌خواهید XML به مرورگر بفرستید
حال ما می‌خواهیم كد نویسی كنیم. برنامه نویسی كردن پیش از افزودن repeater بهتر به نظر می‌رسد، زیرا می‌توانیم خروجی واقعی كه repeater تولید می‌كند را ببینیم.
به صفحه كد نویسی بروید كه طبیعتا اسم آن rss.aspx.cs خواهد بود.
using System;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Xml;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
After that we create the namespace, and set it to be a web page
namespace SyndicationDemo
{
   //Class for returning RSS feed Data
   public partial class rss : System.Web.UI.Page
   {
خطوط بالا، بخش بالای صفحه را نشان می‌دهند. حال می‌میخواهم رخداد load صفحه را بنویسیم. هربار كه كاربری تفاضای مشاهده صفحه را می‌كند به سادگی به سراغ بانك اطلاعاتی می‌رویم و اطلاعات مورد نظر را استخراج كرده و به كاربر می‌فرسیتم.
private void Page_Load(object sender, System.EventArgs e)
{
   // Connect to the Database
   SqlConnection myConnection = new SqlConnection("Data Source=DBServer1;Initial Catalog=rss_news;Persist Security Info=True;User ID=user1;Password=Pass;");
   // Retrieve the SQL query results and bind it to the Repeater
   const string SQL_QUERY = "SELECT top 50 id, headline, story_text, FROM news_stories";
   SqlCommand myCommand = new SqlCommand(SQL_QUERY, myConnection);
 
   myConnection.Open();
   rptRSS.DataSource = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
   rptRSS.DataBind();
   myConnection.Close();
}
برنامه نویسان محترم به خاطر داشته باشند كه روشهای بسیاری برای دریافت اطلاعات وجود دارد.
در دنیای واقعی به احتمال قوی شما مكانیزم های كنترل خطا[4] را نیز در كد خود خواهید نوشت، (اضافه كردن این كد ها به خوتان مربوط است)
پس از اتصال به بانك اطلاعاتی ما دستوری را اجرا می‌كنیم كه نتایج را به شكل محدود شده 50 تایی با استفاده از كلمه Top به ما برمیگرداند.
نكته: در صورتی كه از بانك اطلاعاتی غیر مایكروسافتی استفاده می‌كنید احتمالا دستور top  كار نخواهد كرد.
پس از دریافت نتایج ما آنها را به Repeater متصل می‌كنیم و ارتباط را می‌بندیم.
آخرین بخش از كار ما، تابع ساده‌ای برای جایگزینی كلمات كلید (رزرو شده) XML  با كاراكترهای معادل آن می‌باشد.
protected string FormatForXML(object input)
{
   string data = input.ToString(); //cast input to string
 
   // replace those characters disallowed in XML documents
   data = data.Replace("&", "&amp;");
   data = data.Replace(""", "&quot;");
   data = data.Replace("'", "&apos;");
   data = data.Replace("<", "&lt;");
   data = data.Replace(">", "&gt;");
 
   return data;
}
این تابع تنها یك پارامتر می پذیرد و در آن یك "جستجو و جایگزینی" ساده انجام می دهد تا اینگونه كاراكترها را معتبر سازد.
Repeater
ما تا كنون تمام منطق لازم را ایجاد كرده‌ایم و repeater  را به نتایج چسباندیم، اكنون زمان آن است كه صفحه rss.aspx  را تمام كنیم و سازوكار repeater را كامل كنیم.
<asp:Repeater id="rptRSS" runat="server">
 
سپس ما در   <HeaderTemplate>بخش های زیر را می نویسیم.
 
  <HeaderTemplate>
    <rss version="2.0">
      <channel>
        <title>NW PA Feed (TEST)</title>
        <link>http://nw-editiis1/nwpafeed/</link>
        <description>This is a RSS Feed</description>
  </HeaderTemplate>
قالب بالا بسیار ساده می‌باشد اما به برنامه های rss خوان می گوید كه ما از چه نسخه‌ای استفاده می كنیم همچنین عنوان، لینك و اطلاعات تكمیلی برای كاربر محیا می كند.
سپس بایستی برای هر عنصر (آیتم) موارد مرتبط با آن را بنویسیم.
<ItemTemplate>
<item>
<title><%#FormatForXML(DataBinder.Eval(Container.DataItem," headline "))%>
</title>
<description>
<%#FormatForXML(DataBinder.Eval(Container.DataItem, "story_text"))%>
</description>
<link>http://server1/story?storyid=<%#DataBinder.Eval(Container.DataItem, "id")%>
</link>
<pubdate>
<%#String.Format("{0:R}",DateTime.Now%>
</pubdate>
</item>
</ItemTemplate>
ما برای هر عنصری كه از بانك اطلاعات دریافت كردیم، متد FormatForXml را فراخوانی می‌كنیم.
دلیل این موضوع بسیار مشخص می باشد، در صورتی كه كلمات كلیدی جایگزنی نگردند ساختار فایل مارا برهم خواهند زد و دیگر توسط برنامه‌های خواننده rss قابل پردازش نیستند.
برای استخراج اطلاعات از ركورد مورد نظر ما متد DataBinder.Eval را فراخوانی می كنیم
نكته: اگر از این كدها به عنوان یك برنامه كاربردی می‌خواهید استفاده كنید، بایستی مراقب كاراكترهای دیگری نیز باشید. مانند كاراكترهای غیر ویندوزی[5] یا اسكی.
 
 
همچنین می‌توانید به جای اینكه تاریخ لحظه را به عنوان تاریخ انتشار (pubDate) به كاربر بفرستید ستونی در بانك اطلاعاتی خود برای این موضوع در نظر بگیرید.
همچنین به بخش لینك توجه داشته باشید تا به كاربر خود آدرس دهی صحیح انجام دهید.
حال لازم است كه ما داده‌ها انتهای برای بستن كنترل repeater و تگ های خود اضافه كنیم.
  <FooterTemplate>
      </channel>
    </rss>
  </FooterTemplate>
</asp:Repeater>
حال شما می‌توانید صفحه خود را بایك مرورگر مدرن همانند IE7 بیازمایید.
تا مقاله بعدی، كد نویسی خوبی داشته باشید.
چهارشنبه 14/9/1386 - 3:46
کامپیوتر و اینترنت

چكیده:

Parser, Interpreter, Compiler یا هر اسم دیگری كه بكار برده شود، تفاوتی ندارد. بهرحال مفاهیم سخت و پیچیده‌ای هستند. مقاله‌ای كه درادامه می‌آید ماحصل یك هفته تحقیق در اینترنت برای یافتن یك مترجم TSQL می‌باشد.

كلید واژه:

جاوا – مفسر زبان Sql – ترجمه Sql
Query Builder, Query Compiler, TSql Parser , Sql Parser, Yacc , Antlr , Gold Parser, Interpreter, Query Algorithm, RegX Query ,ClassPath , -cp


 
بسیاری از ما برنامه‌نویسان برای فهمیدن منطق یك متن نوشتاری و تبدیل آن به منطق مورد نیاز، همانند Sql Query، از یك مشت If در كد یا نهایتا Switch – Case استفاده می‌كنیم. مفاهیم این كار در كتابهای درسی و دانشگاهی گفته شده، بشخصه هیچ گاه فكر نمی‌كردم كه این مفاهیم روزی برایم كاربردی شود.
 
نتیجه نهایی كار را اول خواهم گفت و سپس مشكلات و دردسرهای استفاده از این نتیجه گیری را:
در ابتدا شما به یك فایل گرامر نیاز دارید تا زبان شما را شرح دهد، سپس به ابزاری كه آن گرامر را بفهمد و در نهایت این ابزار بایستی توانایی تولید خروجی به زبان دلخواه شما را داشته باشد.
 
  • Antlr
  • Yacc
    دایناسور Parserها در این بررسی آورده نشده است.
  • Gold Parser
 
 
پرطرفدارترین ابزار تولید گرامر Antlr می‌باشد. در زمان نوشتن این مقاله نسخه 3.1 نیز منتشر شده است. این ابزار تقریبا توانایی تولید به هرزبانی را دارد، بدین معنی كه شما می‌توانید C#, Vb.Net , Java , Ruby و هرزبان زنده و مرده دیگری را برای خروجی تقاضا كنید.این ابزار از دیگر ابزارها محبوب تر است و گرامر‌های متعددی را پشتیبانی می‌كند. دارای مستندات بسیاریست اما  كیفیت این مستندات آن چنان بالا نمی‌باشد. بدین معنی تنها با خواندن سایت كارشما آنچنان راه نخواهد افتاد و لازمست كه خود دست به آچار شوید. برای من در حدود 5 روز و روزی متوسط 2 ساعت زمان برد تا بتوانم از ابزار خروجی بگیرم. مشكل اول استفاده از این ابزار، جاوایی بودن آن است كه طبیعتا برای برنامه نویسان ناوارد ایجاد مشكل می‌كند. (مشكل معروف ClassPath – سعی می‌كنم تعدادی از راههای استفاده از Antlr را نیز در اینجا بیاورم). البته پس از مقداری بررسی ابزار Native binary در این سایت یافت شد، تمام امكانات نسخه جاوا را ندارد، اما كارراه  انداز است، به علت مستندات كم زمانی طول كشید تا استفاده از این ابزار ساده نیز مقدور شود.
 
 مشكل دوم عدم همخوانی نسخه‌های مختلف این برنامه با هم می‌باشد. Antlr‌ دارای مجموعه بسیار كاملی از گرامرها می‌باشد، تقریبا هر‌انچه كه فكرش را بكنید.
 
 
اما متاسفانه بسیاری از این گرامرها با نسخه 2 این برنامه نوشته شده‌اند كه در نتیجه امكان استفاده در نسخه 3 وجود ندارد. (نسخه 3 این نرم‌افزار پیشرفت‌های بسیاری از لحاظ سرعت ترجمه متون و بازدهی كرده است، كه استفاده از نسخه 2 را كمی غیر معقول می‌كند)
 
و یك مشكل دیگر (البته به نظر من) استفاده این ابزار از ساختار EBNF برای فایل‌های گرامر می‌باشد. (از نظر من این موضوع ایجاد مشكل می‌كند، زیرا من به دنبال گرامر Sql و TSql بودم، كه گرامر‌های موجود در اینترنت به این منظور همگی به زبان BNF بودند.)
BNF Grammars for SQL-92, SQL-99 and SQL-2003
BNF  = Backus Naur Form (قواعدی و نشانه‌های كه یك زبان را توضیح می‌دهند)
EBNF = BNF توسعه داده شده (Extended)
 
در سایت Antlr گرامری برای TSql وجود دارد، اما برای نسخه 2 می‌باشد.
ANTLR خود دارای ابزاری برای تعریف زبان دلخواه می‌باشد. شما می‌توانید زبان خود را با این ابزار تولید كنید و سپس كدی كه این زبان را می‌فهمد تولید كنید.
 
نحوه استفاده از ANTLR:
  1. فایل باینری و گرامر را از سایت دریافت كرده.
  2. این فایل باینری به شكل خط – فرمان می‌باشد. به عنوان اولین پارامتر فایل گرامر را با مسیر كامل بدهید. (خروجی شما تولید خواهد شد.)
 
استفاده از نسخه جاوای ANTLR:
  1. اولین مشكل حل كردن مسئله‌ای به نام ClassPath می‌باشد، من برنامه نویس جاوا نیستم و نمی‌دانم این اصلا به چه معنیست، اما راه دور زدن آن را یادگرفتم، هنگامی كه شما یك برنامه جاوا را می‌خواهیم اجرا كنید (اگر اشتباه نكنم) به خاطر ماهیت مفسری بودن آن بایستی تمام فایل‌های مورد نیاز را برایش مهیا كنید، اما فكر نكنید به راحتی گفتن C:\Dearjava\Here\MyFiles می‌باشد. برای خود داستانی دارد. برای رفع این مشكل فایلهای اجرایی Antlr‌را در مسیر زیر
    C:\Program Files\Java\jre1.5.0_05\lib\ext
    كپی كنید و مشكل حل می‌گردد.
    فایلهایی كه باید كپی كنید:
     antlr-3.0.1.jar - antlr-runtime-3.0.1.jar -stringtemplate-3.1b1.jar
    این فایلها را می‌توانید از سایت ANTLR دریافت كنید.
 
  1. برای استفاده از ANTLR ابزار جاوا را اجرا كنید. (در قسمت Run تایپ كنید cmd و در پنجره Console بنویسید Java)
java org.antlr.Tool SimpleC.g
با فراخوانی دستور بالا گرامر شما ساخته خواهد شد.(فقط به جای SimpleC.g‌ فایل گرامر خود را قرار دهید). (اگر دراجرا دستور بالا به  مشكل برخوردید بهتر است این دستور را در محلی كه فایلهای ANTLR قرار دارد اجرا كنید. بدین منظور از منظور از طریق خط فرمان به مسیر زیر بروید
"c:\ antlr-3.0.1\src" (یا هر محل دیگری فایلهای شما وجود دارد) و سپس دستور بالا را اجرا كنید)
 
برای تولید كد به زبان دلخواه لازمست كه شما در ابتدای فایل گرامر زبان را تغییر دهید.
 
options
{
            output=AST;
            ASTLabelType=CommonTree;
            language=CSharp;
}

ابزارهای ترجمه كننده از روشهای متنوعی برای ترجمه متون استفاده می‌كنند. كه شما در ابتدای فایل می‌توانید این روش‌ها را مشخص كنید. (شاید بتوان برای زبان فارسی هم چنین مترجمی نوشت، كه حتما می‌توان)
Gold Parser
پس از تلاش بسیار و عدم موفقیت در استفاده از ANTLR برای تولید كد مورد نظر، بشكل اتفاقیgold Parser پیدا شد. ابزار
 
Gold Parser ابزار بسیار راحتی برای استفاده می‌باشد. بدین معنی كه شما به راحتی می‌توانید خروجی خود را از این ابزار استخراج كنید. Gold Parser یك موتور ترجمه متن آزاد می‌باشد در نتیجه نگارش‌های متفاوتی برای آن وجود دارد. (برای مثال سه نسخه به زبان c# ). Gold Parser‌دارای ابزاری به نام Builder می‌باشد، كه این ابزار فایل گرامر را در اولین قدمت صحت سنجی می‌كند و سپس می تواند چارچوب برنامه را به زبان دلخواه شما تولید كند. (هنگامی Builder‌ فایل گرامر را صحت سنجی كرد، بایستی این فایل را در قالب جدولی ذخیره كند كه در واقع این فایل جدول ذخیره شده است كه در برنامه شما مورد استفاده قرار می‌گیرد)
 
پس از این مرحله شما لازمست كه از Dll ها gold parser‌ در نرم‌افزار خود برای ترجمه متن استفاده كنید.
 
در این مرحله تازه مشكل آغاز شده، زیرا متن به درستی تفكیك می‌شود و برمی‌گردد اما فكر نكنید كه شما متدی همانند : GetTables, GetColumns, GetJoins دارید، خیر. حال شما باید یك ساختار درختی را تبدیل به ساختار منطقی خود كنید. برای این منظور و درك بهتر می‌توانید از ابزار Calitha كه درسایت gold parser لینك دریافت آن وجود دارد استفاده كنید.
 
مشكلی كه در این مرحله برای من بوجود آمد عدم درك فایل گرامر Sql توسط Builder بود. با گشت و گذار بیشتر و البته اقدام خداپسندانه "Query A Dataset Project" كه ابزاری پولی برای نوشتن TSql برروی Dataset می‌باشد مشكل حل شد. این سایت فایل گرامر TSql برای GoldParser را رایگان در سایت قرارداده است. (از قسمت فایل های این مقاله می‌توانید این فایل را دریافت كنید).
 
درصورتی كه فایلی لازم داشتید و نیافتید لطفا در قیمت نظرات بنویسید تا در همین سایت قرارداده شود.
 
نمونه استفاده از GoldParser:
        private static Grammar m_grammar;
        private static void LoadGrammer()
        {
 
            using (Stream stream = File.OpenRead(@"C:\Sql 2000 tables.cgt"))
            {
                BinaryReader reader = new BinaryReader(stream);
                m_grammar = new Grammar(reader);
            }
        }
        private static void Log(string message)
        {
            Console.WriteLine(message);
        }
        private static bool DoParse()
        {
  
            LoadGrammer();
            StringReader reader = new StringReader("select col1 , sum(col2) , 'col3' as col4 from Table1 join table2 on(table1.ID = table2.table1.ID)");
            Parser parser = new Parser(reader, m_grammar);
            parser.TrimReductions = true;
 
           
            while (true)
            {
                switch (parser.Parse())
                {
                    case ParseMessage.LexicalError:
                        Log("LEXICAL ERROR. Line " + parser.LineNumber + ". Cannot recognize token: " + parser.TokenText);
                        return false;
 
                    case ParseMessage.SyntaxError:
                        StringBuilder text = new StringBuilder();
                        foreach (Symbol tokenSymbol in parser.GetExpectedTokens())
                        {
                            text.Append(' ');
                            text.Append(tokenSymbol.ToString());
                           
                        }
                        Log("SYNTAX ERROR. Line " + parser.LineNumber + ". Expecting:" + text.ToString());
                        return false;
 
                    case ParseMessage.Reduction:
                        //== Create a new customized object and replace the
                        //== CurrentReduction with it. This saves memory and allows
                        //== easier interpretation
                        //parser.TokenSyntaxNode = m_context.GetSimpleObject();
 
                        //parser.TokenSyntaxNode = parser.ReductionRule.Index;
                        break;
 
                    case ParseMessage.Accept:
                        //=== Success!
                        //m_program = (SimpleStatement)parser.TokenSyntaxNode;
                        Log("-- Program Accepted --");
                        return true;
 
                    case ParseMessage.TokenRead:
                        //=== Make sure that we store token string for needed tokens.
                        //parser.TokenSyntaxNode = m_context.GetTokenText();
                      //  parser.ReadToken();
                       
                        break;
 
                    case ParseMessage.InternalError:
                        Log("INTERNAL ERROR! Something is horribly wrong");
                        return false;
 
                    case ParseMessage.NotLoadedError:
                        //=== Due to the if-statement above, this case statement should never be true
                        Log("NOT LOADED ERROR! Compiled Grammar Table not loaded");
                        return false;
 
                    case ParseMessage.CommentError:
                        Log("COMMENT ERROR! Unexpected end of file");
                        return false;
 
                    case ParseMessage.CommentBlockRead:
                        //=== Do nothing
                        break;
 
                    case ParseMessage.CommentLineRead:
                        //=== Do nothing
                        break;
                }
            }
        }
دوشنبه 12/9/1386 - 7:35
مورد توجه ترین های هفته اخیر
فعالترین ها در ماه گذشته
(0)فعالان 24 ساعت گذشته