您的位置:首页 > 其它

编译原理词/语法分析

2011-04-23 20:21 2441 查看
效果:







代码:

using System;


[code]using System.Collections.Generic;


using System.ComponentModel;


using System.Data;


using System.Drawing;


using System.Linq;


using System.Text;


using System.Windows.Forms;


 


namespace 词法分析


{


public partial class Form1 : Form


{


public int Count = 0;


public bool EndFlag = false;


public char MString;


public string StartString = "";


public string EndString = "";


public string FirstString = " ";


public string Sym = " ";


Dictionary<string, int> Table = new Dictionary<string, int>();


 


public Form1()


    {


InitializeComponent();


}


 


private void textBox1_TextChanged(object sender, EventArgs e)


    {


if (textBox1.Text == "")


{


Count = 0;


StartString = "";


FirstString = " ";


EndString = "";


this.pictureBox2.Image = null;


this.label2.Text = "";


MyDataView.Rows.Clear();


}


if (textBox1.Text.Length - 1>=0)


MString = textBox1.Text.Substring(textBox1.Text.Length - 1, 1)[0];


else MString =' ';


Table = new Dictionary<string, int>();


 


 


Table.Add("begin", 1);


Table.Add("end", 2);


Table.Add("if", 3);


Table.Add("then", 4);


Table.Add("else", 5);


Table.Add("while", 6);


Table.Add("do", 7);


Table.Add("标识符", 8);


Table.Add("整常数", 9);


Table.Add("+", 10);


Table.Add("-", 11);


Table.Add("*", 12);


Table.Add("/", 13);


Table.Add("<=", 14);


Table.Add("<>", 15);


Table.Add("<", 16);


Table.Add(":", 17);


Table.Add(":=", 18);


Table.Add(";", 19);


Table.Add("(", 18);


Table.Add(")", 19);


Table.Add("$", 20);


Table.Add("id", 21);


EndProc();


}




private void EndProc()


    {


if (char.IsLetter(FirstString[0]))


{    


    if (char.IsLetter(MString) || char.IsDigit(MString))


    {


        StartString += MString;


        FirstString = StartString[0].ToString();


}


    else


    {


        if (MString != ' ' || MString != '\n')


{


EndString = StartString;


StartString = MString.ToString();


FirstString = StartString[0].ToString();


}


        


        switch (EndString)


{


case "begin":


    EndString = "begin";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "end":


    EndString = "end";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "if":


    EndString = "if";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "then":


    EndString = "then";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "else":


    EndString = "else";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "while":


    EndString = "while";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "do":


    EndString = "do";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


case "id":


    EndString = "id";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


default :


    EndString = "标识符";


    MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


StartString = "";


FirstString = " ";


    break;


}


        EndProc();


        EndFlag = true;        


}    


}


else if (char.IsDigit(FirstString[0]))


{


    if (char.IsDigit(MString))


    {


        StartString += MString;


        FirstString = StartString[0].ToString();


}


    else


    {        


        if (MString != ' ' || MString != '\n')


{


EndString = StartString;


StartString = MString.ToString();


FirstString = StartString[0].ToString();


}


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "整常数";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        EndProc();


}


}


else if (FirstString == "<")


{


    if (MString=='=')


    {


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "<=";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


}


    else if (MString == '>')


    {


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "<>";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


}


    else


    {


        if (MString != ' ' || MString != '\n')


{


EndString = StartString;


StartString = MString.ToString();


FirstString = StartString[0].ToString();


}


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "<";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        EndProc();


}


}


else if (FirstString == ":")


{


    if (MString == '=')


    {


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = ":=";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


}


    else


    {


        if (MString != ' ' || MString != '\n')


{


EndString = StartString;


StartString = MString.ToString();


FirstString = StartString[0].ToString();


}


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = ":";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        EndProc();


}


}


else switch (MString)


{


    case '+':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "+";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case '-':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "-";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case '*':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "*";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case '/':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "/";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case '(':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "(";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case ')':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = ")";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case '$':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = "$";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case ';':


    StartString = "";


    FirstString = " ";


        EndFlag = true;


        EndString = ";";


        MyDataView.Rows.Add(++Count, EndString, Table[EndString]);


        break;


    case '<':


        StartString = MString.ToString();


        FirstString = StartString[0].ToString();


        break;


    case ':':


        StartString = MString.ToString();


        FirstString = StartString[0].ToString();


        break;


    default:


        if (char.IsLetter(MString))


{


StartString += MString;


FirstString = StartString[0].ToString();


}


        if (char.IsDigit(MString))


{


StartString += MString;


FirstString = StartString[0].ToString();


}


        break;


}


}


 


private void button1_Click(object sender, EventArgs e)


    {


Count = 0;


Scaner();


E();


if (Sym == "$")


{


    if(this.pictureBox2.Image == null)


    this.pictureBox2.Image = Image.FromFile("./图片/笑脸.jpg");


    this.label2.Text = "Excellent work!!";


}


else


    Error();


}


 


private void Scaner()


    {


try


{ 


    Sym = MyDataView[1, Count++].Value.ToString(); 


}


catch 


{


    MessageBox .Show ("请输入终止符$!!");


}


}


 


private void E()


    {


T();


Epie();


}


 


private void Epie()


    {


if (Sym == "+")


{


    Scaner();


    T();


    Epie();


}


else if (Sym != ")" && Sym != "$")


    Error();


}


 


private void T()


    {


F();


Tpie();


}


 


private void Tpie()


    {


if (Sym == "*")


{


    Scaner();


    F();


    Tpie();


}


else if (Sym != ")" && Sym != "$" && Sym != "+")


    Error();


}


 


private void F()


    {


if (Sym == "id")


    Scaner();


else if (Sym == "(")


{


    Scaner();


    E();


    if (Sym == ")")


        Scaner();


    else Error();


}


else Error();


}


 


private void Error()


    {


this.pictureBox2.Image = Image.FromFile("./图片/哭脸.jpg");


this.label2.Text = "Error input!!";


}


}


}

[/code]

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: