⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wordcompile.h

📁 一个Pascal子集语言的编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
     1: 正常结束,且有了输出结果
     -1:非正常结束,错误信息已经记录 
    
*/
{
    if((int(chin)>64)&&(int(chin)<91)) chin=chin+32;        //将所有字符变成小写 
    if(chin=='{')                                           //注释部分,是所有状态通用的 
        {
        //if(State==2000)
            {State=9999;NowChar='!';return 1;}
        }    
    if(chin=='}')
        {
        if(State==9999)
            {
            NowChar='!';
            State=2000;
            return 0;
            }
        else
            {
            /*
                报告错误信息:'{' expected 
            */
            CatchErrors(1);
            return -1;
            }
        }
    
    switch(State)
    {
    case 9999:                                              //注释中的状态
                switch(chin)
                {
                case '}':                                   //终止注释 
                        NowChar='!';
                        State=2000;
                        break;
                default:
                        NowChar='!';                        //而其他信息一概忽略掉 
                        break;
                
                } 
                break;
    case 2000:                                              //自由状态 
                //cout<<int(chin)<<endl;
                switch(chin)
                {
                //case '}':                                 //显示出错误信息: '{'expected 
                //         break;                  
                case 'a':State=2052;break;                  //array,and
                case 'b':State=2012;break;                  //begin,boolean
                case 'd':State=2049;break;                  //do,div
                case 'e':State=2021;break;                  //end,else
                case 'f':State=2032;break;                  //function,false
                case 'i':State=2023;break;                  //integer,if
                case 'm':State=2061;break;                  //mod
                case 'n':State=2066;break;                  //not
                case 'o':State=2056;break;                  //or,of
                case 'p':State=2001;break;                  //program,procedure
                case 'r':State=2029;break;                  //real,read,record
                case 't':State=2040;break;                  //then,true
                case 'v':State=2064;break;                  //var
                case 'w':State=2045;break;                  //while,write
                
                
                case '0':                                   //数字 
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':State=3000;break;
                
                case '<':
                case '>':   
                case '='://TempWord[++wordLength]='=';
                case ':':               
                case '.':               
                case ',':               
                
                case ';':                                   //直接返回正确信息        
                case '\'': 
                case '(': 
                case ')':
                case '[':
                case ']': 
                case '+':
                case '-':
                case '*':
                case '/': 
                case ' ':                                    //空格 
                case '\n':break;                             //回车 
                
                default:if(((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                if(wordLength>=0) return 1;                 //返回1,将栈内字符串输出 
                break;
    case 2001: switch(chin)
                {
                case 'r':State=2002;break;
                default:
                    if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
    case 2002: switch(chin)
                {
                case 'o':State=2003;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
    case 2003: switch(chin)
                {
                case 'g':State=2004;break;
                case 'c':State=2007;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
    case 2004: switch(chin)
                {
                case 'r':State=2005;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
    case 2005: switch(chin)
                {
                case 'a':State=2006;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
    case 2006: switch(chin)
                {
                case 'm':State=8881;break;        //"program"
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2007: switch(chin)
                {
                case 'e':State=2008;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2008: switch(chin)
                {
                case 'd':State=2009;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2009: switch(chin)
                {
                case 'u':State=2010;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2010: switch(chin)
                {
                case 'r':State=2011;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2011: switch(chin)
                {
                case 'e':State=8882;break;        //"procedure"
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2012: switch(chin)
                {
                case 'e':State=2013;break;
                case 'o':State=2016;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2013: switch(chin)
                {
                case 'g':State=2014;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2014: switch(chin)
                {
                case 'i':State=2015;break;
                default:if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2015: switch(chin)
                {
                case 'n':State=8888;break;        //"begin"
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2016: switch(chin)
                {
                case 'o':State=2017;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2017: switch(chin)
                {
                case 'l':State=2018;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
     case 2018: switch(chin)
                {
                case 'e':State=2019;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2019: switch(chin)
                {
                case 'a':State=2020;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2020: switch(chin)
                {
                case 'n':State=8888;break;       //"boolean"
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2021: switch(chin)
                {
                case 'n':State=2022;break;
                case 'l':State=2043;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2022: switch(chin)
                {
                case 'd':State=8888;break;        //"end"
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2023: switch(chin)
                {
                case 'n':State=2024;break;
                case 'f':State=8888;break;        //"if"
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2024: switch(chin)
                {
                case 't':State=2025;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2025: switch(chin)
                {
                case 'e':State=2026;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2026: switch(chin)
                {
                case 'g':State=2027;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2027: switch(chin)
                {
                case 'e':State=2028;break;
                default: if(((chin>='0')&&(chin<='9')&&(wordLength>=0))or((chin>='a')&&(chin<='z'))or(chin=='_'))  State=5000;     
                         else State=5500; break;
                }
                break;
      case 2028: switch(chin)
                {
                case 'r':State=8888;break;        //"integer"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -