效果:

代码:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.ComponentModel;
   4:  using System.Data;
   5:  using System.Drawing;
   6:  using System.Linq;
   7:  using System.Text;
   8:  using System.Windows.Forms;
   9:   
  10:  namespace 词法分析
  11:  {
  12:      public partial class Form1 : Form
  13:      {
  14:          public int Count = 0;
  15:          public bool EndFlag = false;
  16:          public char MString;
  17:          public string StartString = "";
  18:          public string EndString = "";
  19:          public string FirstString = " ";
  20:          public string Sym = " ";
  21:          Dictionary<string, int> Table = new Dictionary<string, int>();
  22:   
  23:          public Form1()
  24:          {
  25:              InitializeComponent();
  26:          }
  27:   
  28:          private void textBox1_TextChanged(object sender, EventArgs e)
  29:          {
  30:              if (textBox1.Text == "")
  31:              {
  32:                  Count = 0;
  33:                  StartString = "";
  34:                  FirstString = " ";
  35:                  EndString = "";
  36:                  this.pictureBox2.Image = null;
  37:                  this.label2.Text = "";
  38:                  MyDataView.Rows.Clear();
  39:              }
  40:              if (textBox1.Text.Length - 1>=0)
  41:              MString = textBox1.Text.Substring(textBox1.Text.Length - 1, 1)[0];
  42:              else MString =' ';
  43:              Table = new Dictionary<string, int>();
  44:   
  45:   
  46:              Table.Add("begin", 1);
  47:              Table.Add("end", 2);
  48:              Table.Add("if", 3);
  49:              Table.Add("then", 4);
  50:              Table.Add("else", 5);
  51:              Table.Add("while", 6);
  52:              Table.Add("do", 7);
  53:              Table.Add("标识符", 8);
  54:              Table.Add("整常数", 9);
  55:              Table.Add("+", 10);
  56:              Table.Add("-", 11);
  57:              Table.Add("*", 12);
  58:              Table.Add("/", 13);
  59:              Table.Add("<=", 14);
  60:              Table.Add("<>", 15);
  61:              Table.Add("<", 16);
  62:              Table.Add(":", 17);
  63:              Table.Add(":=", 18);
  64:              Table.Add(";", 19);
  65:              Table.Add("(", 18);
  66:              Table.Add(")", 19);
  67:              Table.Add("$", 20);
  68:              Table.Add("id", 21);
  69:              EndProc();
  70:          }
  71:              
  72:          private void EndProc()
  73:          {
  74:              if (char.IsLetter(FirstString[0]))
  75:              {                
  76:                  if (char.IsLetter(MString) || char.IsDigit(MString))
  77:                  {
  78:                      StartString += MString;
  79:                      FirstString = StartString[0].ToString();
  80:                  }
  81:                  else
  82:                  {
  83:                      if (MString != ' ' || MString != '\n')
  84:                      {
  85:                          EndString = StartString;
  86:                          StartString = MString.ToString();
  87:                          FirstString = StartString[0].ToString();
  88:                      }
  89:                      
  90:                      switch (EndString)
  91:                      {
  92:                          case "begin":
  93:                              EndString = "begin";
  94:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
  95:                              StartString = "";
  96:                              FirstString = " ";
  97:                              break;
  98:                          case "end":
  99:                              EndString = "end";
 100:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 101:                              StartString = "";
 102:                              FirstString = " ";
 103:                              break;
 104:                          case "if":
 105:                              EndString = "if";
 106:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 107:                              StartString = "";
 108:                              FirstString = " ";
 109:                              break;
 110:                          case "then":
 111:                              EndString = "then";
 112:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 113:                              StartString = "";
 114:                              FirstString = " ";
 115:                              break;
 116:                          case "else":
 117:                              EndString = "else";
 118:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 119:                              StartString = "";
 120:                              FirstString = " ";
 121:                              break;
 122:                          case "while":
 123:                              EndString = "while";
 124:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 125:                              StartString = "";
 126:                              FirstString = " ";
 127:                              break;
 128:                          case "do":
 129:                              EndString = "do";
 130:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 131:                              StartString = "";
 132:                              FirstString = " ";
 133:                              break;
 134:                          case "id":
 135:                              EndString = "id";
 136:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 137:                              StartString = "";
 138:                              FirstString = " ";
 139:                              break;
 140:                          default :
 141:                              EndString = "标识符";
 142:                              MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 143:                              StartString = "";
 144:                              FirstString = " ";
 145:                              break;
 146:                      }
 147:                      EndProc();
 148:                      EndFlag = true;                    
 149:                  }                
 150:              }
 151:              else if (char.IsDigit(FirstString[0]))
 152:              {
 153:                  if (char.IsDigit(MString))
 154:                  {
 155:                      StartString += MString;
 156:                      FirstString = StartString[0].ToString();
 157:                  }
 158:                  else
 159:                  {                    
 160:                      if (MString != ' ' || MString != '\n')
 161:                      {
 162:                          EndString = StartString;
 163:                          StartString = MString.ToString();
 164:                          FirstString = StartString[0].ToString();                        
 165:                      }
 166:                      StartString = "";
 167:                      FirstString = " ";
 168:                      EndFlag = true;
 169:                      EndString = "整常数";
 170:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 171:                      EndProc();
 172:                  }
 173:              }
 174:              else if (FirstString == "<")
 175:              {
 176:                  if (MString=='=')
 177:                  {
 178:                      StartString = "";
 179:                      FirstString = " ";
 180:                      EndFlag = true;
 181:                      EndString = "<=";
 182:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 183:                  }
 184:                  else if (MString == '>')
 185:                  {
 186:                      StartString = "";
 187:                      FirstString = " ";
 188:                      EndFlag = true;
 189:                      EndString = "<>";
 190:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 191:                  }
 192:                  else
 193:                  {
 194:                      if (MString != ' ' || MString != '\n')
 195:                      {
 196:                          EndString = StartString;
 197:                          StartString = MString.ToString();
 198:                          FirstString = StartString[0].ToString();                        
 199:                      }
 200:                      StartString = "";
 201:                      FirstString = " ";
 202:                      EndFlag = true;
 203:                      EndString = "<";
 204:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 205:                      EndProc();
 206:                  }
 207:              }
 208:              else if (FirstString == ":")
 209:              {
 210:                  if (MString == '=')
 211:                  {
 212:                      StartString = "";
 213:                      FirstString = " ";
 214:                      EndFlag = true;
 215:                      EndString = ":=";
 216:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 217:                  }
 218:                  else
 219:                  {
 220:                      if (MString != ' ' || MString != '\n')
 221:                      {
 222:                          EndString = StartString;
 223:                          StartString = MString.ToString();
 224:                          FirstString = StartString[0].ToString();                        
 225:                      }
 226:                      StartString = "";
 227:                      FirstString = " ";
 228:                      EndFlag = true;
 229:                      EndString = ":";
 230:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 231:                      EndProc();
 232:                  }
 233:              }
 234:              else switch (MString)
 235:              {
 236:                  case '+':
 237:                      StartString = "";
 238:                      FirstString = " ";
 239:                      EndFlag = true;
 240:                      EndString = "+";
 241:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 242:                      break;
 243:                  case '-':
 244:                      StartString = "";
 245:                      FirstString = " ";
 246:                      EndFlag = true;
 247:                      EndString = "-";
 248:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 249:                      break;
 250:                  case '*':
 251:                      StartString = "";
 252:                      FirstString = " ";
 253:                      EndFlag = true;
 254:                      EndString = "*";
 255:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 256:                      break;
 257:                  case '/':
 258:                      StartString = "";
 259:                      FirstString = " ";
 260:                      EndFlag = true;
 261:                      EndString = "/";
 262:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 263:                      break;
 264:                  case '(':
 265:                      StartString = "";
 266:                      FirstString = " ";
 267:                      EndFlag = true;
 268:                      EndString = "(";
 269:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 270:                      break;
 271:                  case ')':
 272:                      StartString = "";
 273:                      FirstString = " ";
 274:                      EndFlag = true;
 275:                      EndString = ")";
 276:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 277:                      break;
 278:                  case '$':
 279:                      StartString = "";
 280:                      FirstString = " ";
 281:                      EndFlag = true;
 282:                      EndString = "$";
 283:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 284:                      break;
 285:                  case ';':
 286:                      StartString = "";
 287:                      FirstString = " ";
 288:                      EndFlag = true;
 289:                      EndString = ";";
 290:                      MyDataView.Rows.Add(++Count, EndString, Table[EndString]);
 291:                      break;
 292:                  case '<':
 293:                      StartString = MString.ToString();
 294:                      FirstString = StartString[0].ToString();
 295:                      break;
 296:                  case ':':
 297:                      StartString = MString.ToString();
 298:                      FirstString = StartString[0].ToString();
 299:                      break;
 300:                  default:
 301:                      if (char.IsLetter(MString))
 302:                      {
 303:                          StartString += MString;
 304:                          FirstString = StartString[0].ToString();
 305:                      }
 306:                      if (char.IsDigit(MString))
 307:                      {
 308:                          StartString += MString;
 309:                          FirstString = StartString[0].ToString();
 310:                      }
 311:                      break;
 312:              }
 313:          }
 314:   
 315:          private void button1_Click(object sender, EventArgs e)
 316:          {
 317:              Count = 0;
 318:              Scaner();
 319:              E();
 320:              if (Sym == "$")
 321:              {
 322:                  if(this.pictureBox2.Image == null)
 323:                  this.pictureBox2.Image = Image.FromFile("./图片/笑脸.jpg");
 324:                  this.label2.Text = "Excellent work!!";
 325:              }
 326:              else
 327:                  Error();
 328:          }
 329:   
 330:          private void Scaner()
 331:          {
 332:              try
 333:              { 
 334:                  Sym = MyDataView[1, Count++].Value.ToString(); 
 335:              }
 336:              catch 
 337:              {
 338:                  MessageBox .Show ("请输入终止符$!!");
 339:              }
 340:          }
 341:   
 342:          private void E()
 343:          {
 344:              T();
 345:              Epie();
 346:          }
 347:   
 348:          private void Epie()
 349:          {
 350:              if (Sym == "+")
 351:              {
 352:                  Scaner();
 353:                  T();
 354:                  Epie();
 355:              }
 356:              else if (Sym != ")" && Sym != "$")
 357:                  Error();
 358:          }
 359:   
 360:          private void T()
 361:          {
 362:              F();
 363:              Tpie();
 364:          }
 365:   
 366:          private void Tpie()
 367:          {
 368:              if (Sym == "*")
 369:              {
 370:                  Scaner();
 371:                  F();
 372:                  Tpie();
 373:              }
 374:              else if (Sym != ")" && Sym != "$" && Sym != "+")
 375:                  Error();
 376:          }
 377:   
 378:          private void F()
 379:          {
 380:              if (Sym == "id")
 381:                  Scaner();
 382:              else if (Sym == "(")
 383:              {
 384:                  Scaner();
 385:                  E();
 386:                  if (Sym == ")")
 387:                      Scaner();
 388:                  else Error();
 389:              }
 390:              else Error();
 391:          }
 392:   
 393:          private void Error()
 394:          {
 395:              this.pictureBox2.Image = Image.FromFile("./图片/哭脸.jpg");
 396:              this.label2.Text = "Error input!!";
 397:          }
 398:      }
 399:  }

转载于:https://www.cnblogs.com/lcxu2/archive/2011/04/23/2025846.html

编译原理词/语法分析相关推荐

  1. 编译原理2-Bison语法分析

    ps:补上了图 实验要求 了解 Bison 基础知识和理解 Cminus-f 语法(重在了解如何将⽂法产⽣式转换为 Bison 语句) 阅读 /src/common/SyntaxTree.c ,对应头 ...

  2. 编译原理——自上而下语法分析

    自上而下分析面临的问题 回溯 (当候选有多个的时候,匹配失败会造成回溯) 文法左递归问题 那么他这个语法树就会无限增长但是分析并没有继续进行下去,就会导致分析进入死循环中 LL1文法消除左递归 消除直 ...

  3. 编译原理之语法分析(自底向上)(包含源码)

    编译器之语法分析 自底向上 基本概念 算符优先 SLR 规范LR LALR 自底向上 基本概念 自底向上形成语法树的过程就是及逆行归约,将一堆单词串放在一起,形成某个产生式的样子,然后规约成某个产生式 ...

  4. 编译原理之语法分析(预测分析法)

    编译器之语法分析 自顶向下 上下文无关文法 语法树 NFA→CFG 预测分析法 改写CFG 原因 消除二义性 消除左递归 消除左公因子 消除空产生式 消除回路 自顶向下 上下文无关文法 CFG本质上就 ...

  5. 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf

    // SyntaxAnalyzer.cpp : 定义控制台应用程序的入口点. // #include #include #include #define MAX_COUNT 1024 #define ...

  6. 【编译原理】Python语法分析LL(1)、LR(1)

    目录 一.实验目的 二.实验任务 三.实验原理 1  LL(1)文法 2  LR文法 四.实验过程 1  LL(1)文法 2  LR文法 五.实验结果 1  LL(1)文法 2  LR(0)文法 3 ...

  7. 读书笔记(II) 编译原理及实践

    编译原理及实践 作者:Kenneth C.Louden 机械工业出版社 出版年:2000-3-1 综合评分:7.0 _________________________ 果然如网上流传的那样,翻译的真是 ...

  8. [编译原理]DO-WHILE循环语句的翻译程序设计(LR(1)方法、输出四元式)C++实现

    题目: DO-WHILE循环语句的翻译程序设计(LR(1)方法.输出四元式) 1 课设任务概述 初始条件: ​ 理论:完成编译原理,数据结构.高级编程语言.汇编语言等相关课程的学习,基于计算机专业知识 ...

  9. 编译原理实验(三)词法语法分析综合设计

    版权声明:本文为原创文章,版权归 Geekerstar 所有. 本文链接:http://www.geekerstar.com/technology/105.html 除了有特殊标注文章外欢迎转载,但请 ...

最新文章

  1. 服务器中加速BIOS启动的方法
  2. android .a .so区别,.so,.la和.a库文件有什么区别?
  3. JavaEE 资源注入
  4. 最小公倍数(Least_Common_Multiple)
  5. Java入门算法(动态规划篇2:01背包精讲)
  6. C和指针之字符串编程练习11(统计一串字符包含the的个数)
  7. 最强动画制作人书包_声优访谈丨恋与制作人动画中配声优访谈——夏磊
  8. 阿里RocketMQ Quick Start
  9. matlab偶极矩电场强度分布图_课程设计用MATLAB模拟偶极子的电场分布.doc
  10. 《Java语言程序设计》(基础篇原书第10版)第九章复习题答案
  11. oracle10g 64位安装包下载,ORACLE 10g 64位下载地址
  12. 逻辑思维训练500题及答案
  13. mpvue 使用wxParse解析html
  14. openwrt开发--应用程序IPK包开发
  15. IT服务及相关概念界定
  16. python解析excel公式_读取Excel单元格值,而不是计算它的公式-openpyx
  17. 机器人辅助符文天赋符文天赋_机器人符文天赋
  18. 同花顺_代码解析_技术指标_S
  19. 说说table下面定位层级的问题
  20. Ant design vue中实现动态更换主题色

热门文章

  1. Python+Django+Eclipse 在Windows快速Blog
  2. 计算机组成原理:总线
  3. clock_gettime获取时间
  4. 嵌入式中的中断服务程序
  5. 剑指Offer 56 数组中数字出现的次数
  6. 「周末观赛指南」澳网新王当立?勇士冲击十连胜
  7. iview default-file-list 动态赋值不显示
  8. requireJS文件夹
  9. Apache搭建多个站点方法详解
  10. OpenCV 对图片亮度增强或减弱