91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2022-02-02
  • 語言: C/C++
  • 標簽:

資源簡介

編譯原理——詞法分析器設計與實現,而且完整項目,可運行 針對于pascal語言,也可針對于c語言,只需要更改好關鍵字保留字

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
#include

int?i?row?=?0?line?=?0;
char?a[1000];??//程序
int?number[1000][100];??//常數表
char?mark[100][5];???//標識符表

//詞法分析
int?wordanalysis()
{
????if?((a[i]?>=?‘A‘&&a[i]?<=?‘Z‘)||(a[i]>=‘a‘&&a[i]<=‘z‘))??//分析標識符和保留字
????{
????????char?word[10];
????????char?pro[100][100]?=?{?“PROGRAM“?“BEGIN“?“END“?“VAR“?“INTEGER“?“WHILE“?“IF“?“THEN“?“ELSE“?“DO“?“PROCEDURE“?
????????????????????????????????“char““int““if““else““var“?“return““break““do““while““for““double““float““short“};?//保留字表

????????int?n?=?0;
????????word[n++]?=?a[i++];
????????//若字符為A~Z或0~9,則繼續讀取
????????while?((a[i]?>=?‘A‘&&a[i]?<=?‘Z‘)?||?(a[i]?>=?‘0‘?&&?a[i]?<=?‘9‘)||(a[i]>=‘a‘&&a[i]<=‘z‘))
????????{
????????????word[n++]?=?a[i++];
????????}
????????word[n]?=?‘\0‘;
????????i--;

????????//判斷該標識符是否為保留字
????????for?(n?=?0;?n?????????{
????????????if?(strcmp(word?pro[n])?==?0)
????????????{
????????????????printf(“%s\t(%d-)?保留字\n“?pro[n]?n?+?1);
????????????????return?3;
????????????}
????????}

????????//判斷標識符長度是否超出規定
????????if?(strlen(word)>10)
????????{
????????????printf(“%s\t?Lexical?analyzer?read?Unlawful?identifier“word);
????????????return?0;
????????}

????????//判斷該標識符是否存在標識符表中
????????int?m?=?0;
????????if?(line?!=?0)
????????{
????????????int?q?=?0;
????????????while?(q????????????{
????????????????if?(strcmp(word?mark[q++])?==?0)
????????????????{
????????????????????printf(“%s\t(12%d)?標識符\n“?word?q);
????????????????????return?3;
????????????????}
????????????}

????????}

????????//將該標識符保存到標識符表中
????????strcpy(mark[line]?word);

????????printf(“%s\t(12?%d)?標識符\n“?word?line?+?1);
????????line++;
????????return?3;

????}

????else?if?(a[i]?>=?‘0‘?&&?a[i]?<=?‘9‘)??//分析常數
????{
????????char?x[100];
????????int?n?=?0?sum;
????????x[n++]?=?a[i++];
?????//判斷字符是否是0~9
????????while?(a[i]?>=?‘0‘?&&?a[i]?<=?‘9‘)
????????{
????????????x[n++]?=?a[i++];
????????}
????????x[n]?=?‘\0‘;
????????i--;
????????int?num?=?atoi(x);?//將字符串轉換成int型

????????//判斷該常數是否存在于常數表中
????????if?(row?!=?0)
????????{???
????????????int?y;?
????????????for?(y?=?0;?y?????????????{
????????????????int?w?=?number[y][0];
????????????????sum?=?0;
????????????????int?d;
????????????????for?(d?=?1;?d?<=?number[y][0];?d++)
????????????????{
????????????????????w?=?w?-?1;
????????????????????sum?=?sum?+?number[y][d]?*?pow(2?w);
????????????????}
????????????????if?(num?==?sum)
????????????????{
????????????????????printf(“%d\t(13%d)\n“?num?y?+?1);
????????????????????return?3;
????????????????}
????????????}
????????}
????????int?z?=?num?c?=?num;
????????int?m?=?0;
????????do????????//計算是幾位二進制數
????????{
????????????z?=?z?/?2;
????????????m++;
????????}?while?(z?!=?0);

????????for?(n?=?m;?n?>?0;?n--)??//將二進制保存于常數表中
????????{
????????????number[row][n]?=?

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????6855??2018-04-30?11:44??主程序(改為cpp).cpp
?????文件??????????46??2018-04-30?11:45??使用說明.txt

評論

共有 條評論