词法分析器用C#实现_第1页
词法分析器用C#实现_第2页
词法分析器用C#实现_第3页
词法分析器用C#实现_第4页
词法分析器用C#实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计界面如上图所示 代码如下 namespace WindowsApplication1 public partial class Form1 Form public Form1 InitializeComponent string Str text2 private void 打开ToolStripMenuItem Click object sender EventArgs e string Fname openFileDialog1 Filter 文本文件 txt txt openFileDialog1 Title 打开文件 openFileDialog1 RestoreDirectory true if openFileDialog1 ShowDialog DialogResult OK Fname openFileDialog1 FileName richTextBox1 LoadFile Fname RichTextBoxStreamType PlainText Str richTextBox1 Text private void 保存ToolStripMenuItem Click object sender EventArgs e string Fname openFileDialog1 FileName richTextBox1 SaveFile Fname RichTextBoxStreamType PlainText private void 另存为ToolStripMenuItem Click object sender EventArgs e string Fname saveFileDialog1 Filter 文本文件 txt txt saveFileDialog1 Title 保存文件 saveFileDialog1 RestoreDirectory true saveFileDialog1 ShowDialog Fname saveFileDialog1 FileName if Fname richTextBox1 SaveFile Fname RichTextBoxStreamType PlainText private void 关闭ToolStripMenuItem Click object sender EventArgs e Application Exit private void 字体ToolStripMenuItem Click object sender EventArgs e fontDialog1 ShowEffects true fontDialog1 Font richTextBox1 SelectionFont if fontDialog1 ShowDialog DialogResult OK richTextBox1 SelectionFont fontDialog1 Font private void 词法分析ToolStripMenuItem Click object sender EventArgs e Gets LineNo 1 初始化行号 Gets errors 0 初始化错误个数 Gets text5 string text1 richTextBox1 Text 0 Gets getstring new Gets text2 getstring GetString text1 richTextBox2 Text Token串生成表如下 r n text2 textBox2 Text getstring ErrorN0 private void Form1 Load object sender EventArgs e private void 符号表ToolStripMenuItem Click object sender EventArgs e textBox2 Text 符号表信息 r n textBox2 Text Gets text4 private void 错误详细信息ToolStripMenuItem Click object sender EventArgs e textBox2 Text Gets text5 主要实现功能的代码如下 创建一个 Gets 类用来对输入的字符串进行扫描 class Gets int i 0 j 0 记录字符位置 token数组的位置 public static int LineNo 1 行号 string token 记录识别出的单词 string text2 string text3 用来记录错误信息 string wrong 记录异常信息 public static int errors 0 错误字段的个数 public static string text5 记录错误的详细信息 int flag1 0 flag2 0 flag3 flag4 flag5 flag6 0 标记成对出 现的界符 public static string text4 入口 单词名称 长度 类型 种属 值 内存 地址 r n 用来记录符号表 string m KeyWords new string 32 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned co ntinue for signed void default goto sizeof volatile do if while static string m operator new string 28 运算符 string m bound new string 15 界符 public string GetString string str 读入字符串 string space 空格数 if str Length 0 判断字符串是否为空 return try while str i 0 读入字符判断 空格 字母 数字 界符 if str i str i t str i r i 跳过无意义的字符 else if str i n 如果是换行符 则行号加1 LineNo i else if isalpha str i 如果是字母 i recog id str i for j 0 j m KeyWords Length 不是保留字 for int m 0 m 12 token Length m space space text2 text2 LineNo ToString token space 标识符 Token码 75 r n text4 text4 LineNo ToString token token Length space 标识符 简单变量 未知 未知 r n token space if j m KeyWords Length 是保留字 for int m 0 m 12 token Length m space space text2 text2 LineNo ToString m KeyWords j space 保留字 Token码 Convert ToString gettoken token 1 r n token space else if isdigit str i 如果是数字 i recog dig str i for int m 0 m 12 token Length m space space text2 text2 LineNo ToString token space 常量 Token码 76 r n text4 text4 LineNo ToString token token Length space 整数 简单变量 未知 未知 r n token space else if isbound str i 识别界符 i recog bound str i for int m 0 m 12 token Length m space space text2 text2 LineNo ToString token space 界符 Token码 Convert ToString gettoken token 3 r n token space else if isoperator str i i recog Operator str i for int m 0 m a else return false public bool issign char ch 识别下划线 if ch return true else return false public bool isbound char ch 判断是否为界符 for int j 0 j m bound Length j if ch CompareTo m bound j 0 0 return true return false public bool isoperator char ch for int i 0 i m operator Length i if ch m operator i 0 return true return false private int recog Operator string str int i char state 0 string sstr while state 2 switch state case 0 sstr str i i state 1 break case 1 判断为双个运算符 if str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 str Substring i 1 2 sstr str i i state 2 if str i 1 i state 2 else state 2 运算符 break token sstr return i public int recog id string str int i 识别单词 char state 0 string sstr 记录单词 while state 2 switch state case 0 if isalpha str i state 1 sstr sstr str i i else error 1 break case 1 if isalpha str i isdigit str i issign str i state 1 sstr sstr str i i else state 2 break token sstr 记录识别的字符串 return i public int recog dig string str int i 识别常数 char state 0 string sstr while state 2 switch state case 0 if isdigit str i sstr str i state 1 i break case 1 if isdigit str i sstr str i state 1 i else if str i state 1 i else state 2 break token sstr return i public int recog bound string str int i string sstr for int k 0 k m bound Length k 判断为界符 if str i CompareTo m bound k 0 0 sstr str i i break else continue token sstr if token token flag1 else if token token flag2 else if token token flag3 else if token flag4 else if token flag5 else if token flag6 return i public int gettoken string str int k 获得单词的token值 switch k case 1 for int i 0 i m KeyWords Length i 关 键字 if str m KeyWords i return i break case 2 for int i 0 i m operator Length i 运 算符 if str m operator i return i 32 break case 3 for int i 0 i m bound Length i 界 符 if str m bound i return i 60 break return 0 public string ErrorN0 错误信息个数 error 0 error 1 text3 errors ToString errors return text3 public void error int k 错误信息 switch k case 0 text5 text5 LineNo ToStri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论