Environment.NewLine
هذا اللي عدلته وحطيته بالكود ^^
كويس بديت امشي باللغة ..
Environment.NewLine
هذا اللي عدلته وحطيته بالكود ^^
كويس بديت امشي باللغة ..
Ms.Nada كتب:هلا خيو ^^
المشكلة أنو 12345.234E45
يعتبر رقم كامل "رقم اسي"
بجرب الطريقة اللي قلت عنها "عن التكست بوكس"
تسلم خيو تعبتك معاي ^^
(?'Number' (\.\d+|\d+(\.\d+)?(E\d+)?) ) |
طيب عندي سؤال
(?'keyword' [(\'if' || \'then')] ) |
أبيه يطلعها لي key word مو identifier
بليز سآعدوني
مودي ...
جد جد ألف شكر كنت مسويه طريقتك بس بالعكس
يعطيك العافية ^^
(?'Keyword' \s(if|then|false|true|for|foreach|while)\s) |
ثم اضافة Keyword الى enum Token
تم تعديل هذه المشاركة بواسطة Moudey في 2 مايو 2010 في 15:08
مودي
طلع معاك key word
لأنه طلع معاي identifier
=(
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])";(?'Keyword' [^\w](if|then|false|true|for|foreach|while)[^\w]) |
تعديل بسيط لاستخراج الكلمات المفتاحية فقط [^\w] تعنى كل المحارف ماعدا المحارف من a to z
برضوا النتيجة identifier مودي
حاولت غيرت في السيمانتيك لسه مو راضي يتغير
طيب هو
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
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);
}
}مرررره شكرا مودي
ضبطت الحمدلله كمان صلحت الـ relop يوم فهمت طريقة keyword
الله يجزاك الجنه ..^^
وعزوز
الف شكر كمان لك ...
انت البداية والاساس =)
وعمرو الصعيدي ..
البرنامج اللي نزلته بأذن الله اصلحه وانزله هينا
تسلمون جميعا فردا فرد
وجزاكم ربي الجنه ^^
اعتقد بناء lexical analyzer يجب ان لا يعتمد على regex
ففى المرفقات مثال يوضح كيفية بناء lexical analyzer او Scanner لمادة Compiler فالمثال بسيط وواضح ان شاء الله
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…