zoukankan      html  css  js  c++  java
  • 编译原理词/语法分析

    效果:

    捕获image

    代码:

       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:  }
  • 相关阅读:
    MVC 传值
    LINQ to SQL 语句(2)之 Select/Distinct
    LINQ to SQL 语句(1)之 Where
    输入变量相同情况下,结果不正确
    vmware ubuntu 切换终端命令行
    汉字编码问题
    Windows API所提供的功能可以归为七类
    比较好的c++博文
    环境和库的引入
    C#调用Fortran生成的DLL的方法报内存不足
  • 原文地址:https://www.cnblogs.com/lcxu2/p/2025846.html
Copyright © 2011-2022 走看看