编译原理词/语法分析
2011-04-23 20:21
2441 查看
效果:
代码:
[/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; }
代码:
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; }
相关文章推荐
- 编译原理笔记8 自上而下语法分析-…
- 编译原理简单语法分析
- 编译原理之词法分析、语法分析、语义分析
- 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析
- 编译原理 实验3 递归下降语法分析程序设计
- 编译原理笔记9 自上而下语法分析-…
- 语法分析_编译原理
- 编译原理实习(应用预测分析法LL(1)实现语法分析)
- 利用编译原理中的语法分析进行表达式求值
- 编译原理-词法分析-语法分析-语义分析生成中间代码-python版
- 编译原理结构框架4自顶向下的语法分析
- 编译原理-用Bison构造语法分析程序-小小计算器
- 【编译原理】简析文法分析,语法分析
- 编译原理之词法分析、语法分析、语义分析
- 编译原理:使用flex和bison工具实现语法分析树的建立
- 编译原理中的语法分析——自顶向下
- 编译原理 - 语法分析
- 自顶向下语法分析——编译原理
- 编译原理之自顶向下语法分析方法
- 【编译原理】自上而下的语法分析之预测分析法