الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تمييز " تحليل " النص المدخل بال TEXTBOX

بدأه Ms.Nada في 22 أبريل 2010 · 37 رد · 5,960 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#26

Environment.NewLine

هذا اللي عدلته وحطيته بالكود ^^

كويس بديت امشي باللغة ..

#27
Ms.Nada كتب:

هلا خيو ^^

المشكلة أنو 12345.234E45

يعتبر رقم كامل "رقم اسي"

بجرب الطريقة اللي قلت عنها "عن التكست بوكس"

تسلم خيو تعبتك معاي ^^

(?'Number' (\.\d+|\d+(\.\d+)?(E\d+)?) ) |

مواضيع متنوعة

#28

طيب عندي سؤال

 (?'keyword' [(\'if' || \'then')] ) |

أبيه يطلعها لي key word مو identifier

بليز سآعدوني

مودي ...

جد جد ألف شكر كنت مسويه طريقتك بس بالعكس

يعطيك العافية ^^

#29
(?'Keyword' \s(if|then|false|true|for|foreach|while)\s) |

ثم اضافة Keyword الى enum Token

تم تعديل هذه المشاركة بواسطة Moudey في 2 مايو 2010 في 15:08

مواضيع متنوعة

#30

مودي

طلع معاك key word

لأنه طلع معاي identifier

=(

#31
internal enum Token
{
    OpenParan, CloseParan, Comma,
    Plus, Minus, Multiply, Divide,
    Number,
    Keyword, Identifier,
    Constant,
    Other
}

const string Pattern = @"
        (?'OpenParan' \( ) | (?'CloseParan' \) ) |
        (?'Identifier' [a-zA-Z]\w* ) |
        (?'Keyword' \s(if|then|false|true|for|foreach|while)\s) |
        (?'Comma' , ) |
        (?'Plus' \+ ) | (?'Minus' - ) | (?'Multiply' \* ) | (?'Divide' / ) |
        (?'Number' (\.\d+|\d+(\.\d+)?(E\d+)?) ) |
        (?'Other' [^ \r\n\t])";

مواضيع متنوعة

#32
(?'Keyword' [^\w](if|then|false|true|for|foreach|while)[^\w]) |

تعديل بسيط لاستخراج الكلمات المفتاحية فقط [^\w] تعنى كل المحارف ماعدا المحارف من a to z

مواضيع متنوعة

#33

برضوا النتيجة identifier مودي

حاولت غيرت في السيمانتيك لسه مو راضي يتغير

#34

ممكن ارفاق الكود؟

مواضيع متنوعة

#35

طيب هو

windows application forms

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace LCalc
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textbox1.Text = "LEXEME==========================Token \t\t";
            string st = codetext.Text;
            foreach (TokenEntity t in st.GetLambdaCalcTokens())
            {
                textbox1.Text += t + "\t\t\t\t";
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }



    internal enum Token
    {
        OpenParan, CloseParan,
        Arrow,
        Comma,
        Period,
        Plus, Minus, Multiply, Divide,
        Number,
        Identifier,
        relop,
        delim,
      sign,
      Keyword,
        lexical_error
    }
    internal static class LambdaCalcScanner
    {

        const string Pattern = @"
                        (?'sign' [\= \+ \- \* \^ ])|
                        (?'delim' [\ \r \n \t \b])|
                        (?'relop' [\< \> \= ])|
                        (?'Number' (\.\d+|\d+(\.\d+)?(E\d+)?) ) |
                        (?'Identifier' [a-zA-Z ]\w* ) |


                        (?'Keyword' [^\w](if|then|false|true|for|foreach|while)[^\w]) |
                        (?'lexical_error' [\. \) \( \: \; \@ \# \, \! \£ \$ \% \&   ])";


        private static Regex MathRegex = new Regex(Pattern, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled);


        public static IEnumerable<TokenEntity> GetLambdaCalcTokens(this string exp)
        {
            Token[] tokens = Enum.GetValues(typeof(Token)).OfType<Token>().ToArray();
            foreach (Match m in MathRegex.Matches(exp))
            {

                foreach (Token token in tokens)
                {
                    if (m.Groups[token.ToString()].Success)
                    {
                        yield return new TokenEntity(
                            token,
                            m.Index,
                            m.Value);
                    }
                }
            }

            yield return new TokenEntity(Token.lexical_error, exp.Length, "\0");
            yield return new TokenEntity( Token.relop, exp.Length, "\0");
            yield return new TokenEntity(Token.delim, exp.Length, "\0");
            yield return new TokenEntity(Token.sign, exp.Length, "\0");
            yield return new TokenEntity(Token.Keyword, exp.Length, "\0");
        }
    }
    internal class TokenEntity
    {
        public TokenEntity(Token token, int startPos, string value)
        {
            this.Token = token;
            this.StartPos = startPos;
            this.Value = value;
        }


        public Token Token { get; private set; }


        public int StartPos { get; private set; }


        public string Value { get; private set; }

        public override string ToString()
        {

            return string.Format(Value.PadRight(13) + "\t\t" + Token);

        }
    }
}

تم تعديل هذه المشاركة بواسطة Ms.Nada في 3 مايو 2010 في 20:04

#36
internal enum Token
{
	Keyword,
	sign,
	delim,
	relop,
	Number,
	Identifier,
	lexical_error
}
internal static class LambdaCalcScanner
{
	const string Pattern = @"
			(?'Keyword' (if|then|false|true|for|foreach|while)) |
			(?'sign' (\+|-|\*|\^)) |
			(?'delim' [\r\n\t]) |
			(?'relop' [\<\>=])|
            (?'Number' (\.\d+|\d+(\.\d+)?(E\d+)?) ) |
            (?'Identifier' [a-zA-Z]\w* ) |
            (?'lexical_error' [\.\)\(:;@#,!£$%&])";

	private static Regex MathRegex = new Regex(
		Pattern, 
			RegexOptions.IgnoreCase | 
			RegexOptions.IgnorePatternWhitespace | 
			RegexOptions.Singleline | 
			RegexOptions.Compiled);

	public static IEnumerable<TokenEntity> GetLambdaCalcTokens(this string exp)
	{
		Token[] tokens = Enum.GetValues(typeof(Token)).OfType<Token>().ToArray();
		foreach(Match m in MathRegex.Matches(exp))
		{

			foreach(Token token in tokens)
			{
				if(m.Groups[token.ToString()].Success)
				{
					yield return new TokenEntity(
						token,
						m.Index,
						m.Value);
				}
			}
		}
		yield return new TokenEntity(Token.lexical_error, exp.Length, "\0");
	}
}
internal class TokenEntity
{
	public TokenEntity(Token token, int startPos, string value)
	{
		this.Token = token;
		this.StartPos = startPos;
		this.Value = value;
	}
	public Token Token { get; private set; }
	public int StartPos { get; private set; }
	public string Value { get; private set; }
	public override string ToString()
	{
		return string.Format(Value.PadRight(20)+"\t" + Token);
	}
}

مواضيع متنوعة

#37

مرررره شكرا مودي

ضبطت الحمدلله كمان صلحت الـ relop يوم فهمت طريقة keyword

الله يجزاك الجنه ..^^

وعزوز

الف شكر كمان لك ...

انت البداية والاساس =)

وعمرو الصعيدي ..

البرنامج اللي نزلته بأذن الله اصلحه وانزله هينا

تسلمون جميعا فردا فرد

وجزاكم ربي الجنه ^^

#38

اعتقد بناء lexical analyzer يجب ان لا يعتمد على regex

ففى المرفقات مثال يوضح كيفية بناء lexical analyzer او Scanner لمادة Compiler فالمثال بسيط وواضح ان شاء الله

Scanner.zip

مواضيع متنوعة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…