亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? typecheck.h

?? 一個Pascal子集語言的編譯器
?? H
?? 第 1 頁 / 共 2 頁
字號:
//TypeCheck.h


//inputfile:  sentence.txt, wordtable2.txt
//outputfile: typecheck.txt

#ifndef TYPECHECK_H_
#define TYPECHECK_H_

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

/*****************************************************************************************
    類型檢查器
     
    所實現功能:
     
    1。根據語法分析器所提供的每個語句,及標識符表進行分析,并顯示出錯誤信息。 
    2。類型檢查的內容包括:
            (1)判斷等式兩邊是否類型相同或相容
            (2)判斷賦值表達式兩邊是否類型相同或相容
            (3)判斷函數與過程使用時的參數個數及類型是否正確 
    3。類型代碼如下:
             
             整數       101
             浮點數     102
             布爾型     103 
             
    4。所需要分析的語句如下:
            
            ids ;
            ids ( ids_list ) ;
            ids assignop simple ;
            simple relop simple ;
            write ( simple_list ) ; 
            
            
       simple_list   -> simple
                        | 
                        simple , simple_list
                        
       id_list       -> id
                        |
                        id , id_list   
                                                    
       simple        -> factor                                        
                        | 
                        factor op simple                               
                        
       factor        -> ids                                             
                        |
                        number                                       
                        |
                        not factor                                   
                        |
                        true                                          
                        |
                        false                                         
                        |
                        ( simple )                                    
                    
     
     
      
******************************************************************************************/
class typeCheck
{
    private:
    
        int CurrentLine;              //記錄當前的行號信息,此信息是從語法分析結果中得到的 
        int Parament;                 //記錄當前語句所在的函數段
    
        int VariantIndex;
        int VariantCount;
        int VariantKind[100];
        int VariantType[100];
        int VariantHave[100];
        int VariantBelong[100];
        char VariantName[100][256];   //定義變量信息 
    
        ifstream fin;
        ifstream fin1;
        ifstream fin2;
        ifstream fintable;
        ofstream fout;                //文件指針的定義  
        
        char Errors[20][256];         //保存了各種錯誤代碼信息 
        int Error_Count;              //記錄錯誤信息   
        
        char Word[100][256];          //用于記錄當前所讀到的單詞 
        int State;                    //記錄當前狀態 
        int Count;                    //記錄一個語句中的單詞數 
        int Index;                    //掃描各個單詞的指針 
        double Value[100];          //記錄各個變量的編號信息及數字的真實值 
        
        char SimpleWord[100][256];
        double SimpleValue[100];
        int SimpleCount;
        
        int LeftType;
        int RightType;                //記錄左右兩邊的類型 
    
    protected:
    
        void Initialize();            //初始化
        int Check();                  //對信息進行檢查 
        void CatchError(int num);     //輸出錯誤信息 
        void DefineError();           //定義各種錯誤信息
        void Prepare();               //首先將輸入文件進行轉化 
        int simpleCheck();            //對簡單表達式進行檢查  
        void TestVariant();           //判斷是否有重復變量  
              
    public:
    
        int Compile(char* filename);
    
};

void typeCheck::Initialize()
{
    Prepare();                              //將輸入文件進行改寫 
    
    fintable.open("wordtable2.txt");        //打開單詞表文件 
    fin.open("temp2.txt");
    Error_Count=0;                          //將各個變量進行初始化 
    DefineError();
    
    while(fintable>>VariantIndex)
          fintable>>VariantKind[VariantIndex]
                  >>VariantType[VariantIndex]
                  >>VariantName[VariantIndex]
                  >>VariantHave[VariantIndex]
                  >>VariantBelong[VariantIndex];
                                            //將變量信息從單詞表中讀取出 
    VariantCount=VariantIndex;
    
}

void typeCheck::TestVariant()
{
    for(int i=1;i<VariantCount;i++)
        for(int j=i+1;j<=VariantCount;j++)
        if(strcmp(VariantName[i],VariantName[j])==0)
            if(VariantBelong[i]/100==VariantBelong[j]/100)  //如果變量所屬于的位置都一樣則輸出錯誤信息 
            {
                Value[1]=i;
                CatchError(3);
                
            }
    
    
}

void typeCheck::DefineError()                           //定義錯誤類型 
{
    strcpy(Errors[0]," is not a procedure. ");
    strcpy(Errors[1]," parament number not matched. ");
    strcpy(Errors[2]," assignment not adapt. ");
    strcpy(Errors[3]," redeclared variant ");           //重復定義變量,或是一個名稱變量有雙重意義 
    strcpy(Errors[6]," Equation can't match. ");        //等式左右的變量類型不相同 
    strcpy(Errors[10]," information may missing. ");    //warning信息 
    
}



void typeCheck::CatchError(int num)         //將錯誤信息直接輸出 
{
    if(num<6)
    {
    Error_Count++;
    cout<<"Error ("<<Error_Count<<"): \""<<VariantName[int(Value[1])]<<"\" "<<Errors[num]<<" at line: "<<CurrentLine<<endl;
    }
    else if(num==6)
    {
    Error_Count++;
    cout<<"Error ("<<Error_Count<<"): \"=\" "<<Errors[num]<<" at line: "<<CurrentLine<<endl;
    
    }
    else
    {
    cout<<"Warning : \""<<VariantName[int(Value[1])]<<"\" "<<Errors[num]<<" at line: "<<CurrentLine<<endl;
    
    }
    
}



int typeCheck::simpleCheck()                //返回一個表達式的值 
{
    int state=101;
    int value;
    for(int i=0;i<=SimpleCount;i++)
    {
        if(strcmp(SimpleWord[i],"ids")==0)          //如果是變量則將其返回值 
        {
            value=VariantType[int(SimpleValue[i])];
            value=value%100+100;
        }
        else if(strcmp(SimpleWord[i],"number")==0)
        {
            if(SimpleValue[i]==int(SimpleValue[i])) //說明讀進來的 number是整數 
                value=101;
            else                                    //否則是浮點數
                value=102;
        }
        else if(strcmp(SimpleWord[i],"op")==0)
        {
            if(SimpleValue[i]==4)                   //是除法
                value=102; 
            else
                value=101;    
        }
        
        switch(state)
        {
            case 101:if(value==102) state=102;
                     break;
            case 102:break;
            case 103:if(value==102) state=102;
                     if(value==101) state=101;
                     break;
            default:break;
        }
        
    }
    return state;
}

void typeCheck::Prepare()                   
    //此函數的主要作用是將帶有函數和過程名的代碼提取出來,單獨作為一行 
{
    fin1.open("sentence.txt");               //打開輸入文件 
    fout.open("temp2.txt");                 //打開輸出文件 
    
    int state=0;                            //利用狀態表示當前是在寫入還是在記錄 
    double TempValue;                          //記錄變量的屬性 
    int TempCount;
    char NowWord[256],NextWord[256];        //記錄當前詞和下一個詞 
    
    while(fin1>>NextWord)
    {
    if((strcmp(NextWord,"ids")==0)||(strcmp(NextWord,"number")==0))
        fin1>>TempValue;
        
        if(state==0)                             //當前為寫入狀態 
        {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品资源二区在线| 欧美亚洲丝袜传媒另类| 亚洲444eee在线观看| 中文字幕在线免费不卡| 国产日产精品1区| 久久综合国产精品| 久久伊人蜜桃av一区二区| 日韩欧美一级二级| 日韩欧美视频在线| 久久综合久久99| 国产精品色噜噜| 亚洲精品免费在线观看| 一区二区在线看| 天堂久久一区二区三区| 日韩专区一卡二卡| 久久99久久久久久久久久久| 日本网站在线观看一区二区三区| 免费看精品久久片| 高清国产一区二区| 一本一本大道香蕉久在线精品| 色哟哟精品一区| 51精品秘密在线观看| 亚洲精品一区二区三区福利| 日本一区二区三区视频视频| 亚洲男人天堂av| 午夜精品一区二区三区免费视频| 久久99热99| 91麻豆精品一区二区三区| 欧美精品久久天天躁| 欧美精品一区二区在线播放 | 欧美军同video69gay| 精品伦理精品一区| 中文字幕在线不卡国产视频| 日韩精品亚洲专区| 国产.欧美.日韩| 欧美日韩一级视频| 欧美国产视频在线| 婷婷成人综合网| 成人免费观看视频| 7777精品伊人久久久大香线蕉 | 亚洲少妇30p| 日韩精品午夜视频| 99热这里都是精品| 日韩精品一区二区在线| 亚洲人成网站影音先锋播放| 蜜桃传媒麻豆第一区在线观看| 成人av免费在线观看| 91精品国产黑色紧身裤美女| 国产精品蜜臀在线观看| 亚洲成av人片一区二区三区| 成人综合在线观看| 日韩免费看的电影| 亚洲综合免费观看高清完整版在线| 久久国产精品72免费观看| 色综合中文综合网| 国产欧美一区二区三区网站| 图片区小说区国产精品视频| 成人av资源在线| 精品毛片乱码1区2区3区| 亚洲韩国精品一区| 91视频国产资源| 国产亚洲短视频| 日本三级亚洲精品| 欧美日免费三级在线| 国产精品久久久99| 国产一区91精品张津瑜| 欧美成人官网二区| 日日夜夜一区二区| 欧美手机在线视频| 一区二区激情小说| 一本久久综合亚洲鲁鲁五月天| 国产日韩欧美一区二区三区综合| 美腿丝袜亚洲色图| 欧美日韩精品电影| 性做久久久久久免费观看| 在线免费观看日本欧美| 亚洲久草在线视频| 在线免费精品视频| 亚洲一卡二卡三卡四卡五卡| 在线亚洲免费视频| 亚洲综合无码一区二区| 欧美午夜不卡在线观看免费| 亚洲丰满少妇videoshd| 欧美视频三区在线播放| 亚洲国产精品久久久久秋霞影院 | 欧美日韩免费一区二区三区视频| 亚洲另类一区二区| 精品视频在线视频| 日韩电影一二三区| 欧美精品一区二区高清在线观看| 九九九精品视频| 国产亚洲污的网站| youjizz久久| 亚洲精选在线视频| 欧美福利电影网| 毛片av一区二区| 欧美国产精品中文字幕| 色哟哟国产精品| 美女视频黄a大片欧美| 久久久91精品国产一区二区三区| 成人午夜伦理影院| 亚洲一区中文在线| 欧美一级久久久久久久大片| 久久国产乱子精品免费女| 国产午夜精品一区二区| 色婷婷综合久久久久中文| 五月激情综合网| 久久久高清一区二区三区| a4yy欧美一区二区三区| 日韩精品乱码免费| 国产日产欧美一区二区视频| 91黄色小视频| 国产在线播精品第三| 18欧美亚洲精品| 欧美精选一区二区| 国产不卡高清在线观看视频| 曰韩精品一区二区| 精品美女在线观看| 欧美色爱综合网| 国产美女av一区二区三区| 亚洲自拍偷拍网站| 久久久久国产精品麻豆| 欧美亚洲国产怡红院影院| 国产福利视频一区二区三区| 亚洲一区二区欧美激情| 久久久91精品国产一区二区三区| 欧美综合久久久| 国产精品一区二区男女羞羞无遮挡| 亚洲最大成人综合| 久久免费国产精品| 日韩视频免费观看高清在线视频| 成a人片亚洲日本久久| 麻豆免费精品视频| 午夜精品福利久久久| 国产精品久久久久久久浪潮网站 | 久久男人中文字幕资源站| 精品视频1区2区| eeuss鲁片一区二区三区| 久久精品国产一区二区| 亚洲一级片在线观看| 裸体在线国模精品偷拍| 亚洲国产wwwccc36天堂| 亚洲日穴在线视频| 国产精品国产三级国产普通话99 | 性做久久久久久久久| 国产精品久久久久久妇女6080| 日韩亚洲电影在线| 欧美肥妇bbw| 欧美视频精品在线| 欧美视频一区二区| 在线观看91精品国产入口| 色综合中文字幕| 91在线码无精品| 91丨九色丨国产丨porny| 成人午夜视频在线观看| 粉嫩13p一区二区三区| 国产福利一区二区三区视频在线| 国产在线一区二区| 国产凹凸在线观看一区二区| 国产91精品一区二区| 国产精品91一区二区| 国产成人亚洲精品青草天美| 国产福利视频一区二区三区| 国产激情精品久久久第一区二区| 狠狠色丁香婷综合久久| 国产91露脸合集magnet| av在线播放一区二区三区| 色综合久久综合网欧美综合网| 色婷婷综合久久久久中文一区二区| 在线看国产一区二区| 欧美日韩国产123区| 日韩亚洲欧美综合| 精品国产一区二区三区久久影院 | 亚欧色一区w666天堂| 天天综合日日夜夜精品| 老司机精品视频导航| 国产成人在线网站| 在线看不卡av| 日韩精品一区二区三区在线| 久久久久国产精品免费免费搜索| 国产精品久久久久一区二区三区共| 亚洲人成影院在线观看| 性做久久久久久免费观看欧美| 久久99精品久久久久| 成人激情午夜影院| 欧美巨大另类极品videosbest| 久久亚洲精品小早川怜子| 亚洲少妇30p| 免费成人在线观看视频| 丰满亚洲少妇av| 欧美日韩一区中文字幕| 久久久亚洲高清| 亚洲制服丝袜在线| 国产原创一区二区| 色狠狠桃花综合| 久久综合狠狠综合久久综合88| 亚洲欧美另类综合偷拍| 九九九精品视频| 在线观看国产一区二区| 国产视频一区在线观看|