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

資源簡介

本資源是PL/0語言的語法分析程序(C語言版),外加輸出語法樹,每行附帶注釋,可讀性強,下載下來配合.h文件即可編譯

資源截圖

代碼片段和文件信息

/*
?*?PL/0?complier?program?for?win32?platform?(implemented?in?C)
?*
?*?The?program?has?been?test?on?Visual?C++?6.0?Visual?C++.NET?and
?*?Visual?C++.NET?2003?on?Win98?WinNT?Win2000?WinXP?and?Win2003
?*
?*?使用方法:
?*?運行后輸入PL/0源程序文件?
?*/

#include?
#include?
#include?“pl0.h“
#include?“string.h“

//?分割符,0表示0個‘--‘,1表示1個,以此類推
int?Tree_level[500];
//?存單詞
char*?Tree[500];?
//?數單個個數
int?word_num?=?0;

void?Gen_grammerTree(){
int?i=0;?
printf(“\nGrammer?Tree\n“);
????for(i=0?;?i????????switch?(Tree_level[i])
????{
????case?0:
???? printf(“%s\n“Tree[i]);
????????break;
????case?1:
???? printf(“--%s\n“Tree[i]);
????????break;
????case?2:
????????printf(“----%s\n“Tree[i]);
????????break;
????case?3:
????????printf(“------%s\n“Tree[i]);
????????break;
????case?4:
????????printf(“--------%s\n“Tree[i]);
????????break;
????case?5:
????????printf(“----------%s\n“Tree[i]);
????????break;
????case?6:
????????printf(“------------%s\n“Tree[i]);
????????break;
????case?7:
????????printf(“--------------%s\n“Tree[i]);
????????break;
????case?8:
????????printf(“----------------%s\n“Tree[i]);
????????break;
????case?9:
????????printf(“------------------%s\n“Tree[i]);
????????break;
????case?10:
????????printf(“--------------------%s\n“Tree[i]);
????????break;
????case?11:
????????printf(“----------------------%s\n“Tree[i]);
????????break;
????case?12:
????????printf(“------------------------%s\n“Tree[i]);
????????break;
????case?13:
????????printf(“--------------------------%s\n“Tree[i]);
????????break;
????case?14:
????????printf(“----------------------------%s\n“Tree[i]);
????????break;
????case?15:
????????printf(“------------------------------%s\n“Tree[i]);
????????break;
????case?16:
????????printf(“--------------------------------%s\n“Tree[i]);
????????break;
????default:
???? printf(“越界!!“Tree[i]);
????????break;
????}
????}
}

int?main()
{
????printf(“Input?pl/0?file????“);
????scanf(“%s“?fname);?????/*?輸入文件名?*/

????//?打開一個文件?返回文件指針:?FILE類型的指針變量?指向該文件
????fin?=?fopen(fname?“r“);

????if?(fin)
????{
????????init();?????/*?初始化?*/

????????err?=?0;????//?計算已發現的錯誤個數
????????//?cc、ll:?getch使用的計數器?cc表示當前字符
????????//?cx虛擬機代碼指針?取值范圍[0?cxmax-1]
????????cc?=?cx?=?ll?=?0;
????????//?緩沖區中獲取字符,getch?使用?初始化為一個空格
????????ch?=?‘?‘;

????????//?首次讀一個字符?后面的在block里完成?其是遞歸程序
????????if(-1?!=?getsym())
????????{
????????????//?記錄語法樹
????????????int?Grammer_level?=?0;
????????????Tree_level[word_num]?=?Grammer_level;
????????????Tree[word_num]?=?“?<程序>“;
????????????word_num+=1;
????????????//?三個參數?1:?當前分程序所在層?2:?名字表當前尾指針?第三個就是標識了3種聲明和6種語句的bool數組
????????????//?第四個參數,表示語法樹層數
????????????if(-1?==?block(0?0?Grammer_level+1))???/*?調用編譯程序?*/
????????????{
????????????????fclose(fin);
??????

評論

共有 條評論