編譯原理保留字是什麼?
編譯原理問題添加else保留字後如何測試 5分
E是文法開頭。ε代表終結符號(推理中代表終點或結果,程序語言中代表常量等)。E T 這些大寫字母一般代表非終結符號(這些代表中間過程,非結果。程序中代表函數等等)。開始是E。因為有個G(E)。E就是文法開始符號。推導就有E開始,它也是一個非終結符(代表函數、或者一個推導過程,類似於程序中的main(c++)、winmain(vc++)、dllmain(dll)等主函數)。
1算術表達式文法:這個文法是一個遞歸文法。計算機進行邏輯推導時會走很多彎路(類似於遍歷一顆樹的過程)。為了不讓計算機走彎路(提高效率的目的),可以變換為第二種文法。這種文法消除了遞歸(消除了歧義,類似於後綴表達式),使計算機可以一條直線走到底兒推導出結果。
我也很久沒看編譯原理了。 呵呵
編譯原理的名字與標識符的區別是什麼?
不太明白樓主想問什麼,先幫你查這麼多,如果還不明白,請繼續詢問百度和谷哥。
標識符
是用戶編程時使用的名字。我們指定某個東西、人,都要用到它,他或她的名字;在數學中解方程時,我們也常常用到這樣或那樣的變量名或函數名。同樣的道理,在電腦語言中,對於變量,常量,函數,語句塊也有名字,我們統統稱之為標識符。我們在給人起名字時有一定的規矩,比如,頭一個字為父親或母親的姓氏,後面一般為一個或兩個字。所以,您可以想當然地認為電腦語言裡的標識符也有一定的命名規則,如果您這樣想,那您就想對了!
保留字(reserved word)
保留字又稱關鍵字。
指在高級語言中已經定義過的字,使用者不能再將這些字作為變量名或過程名使用。
每種程序設計語言都規定了自己的一套保留字。
例如:BASIC語言規定不能使用LIST作為變量名或過程名,因為LIST是一個BASIC語言專用於顯示內存程序的命令。
C有22+10 = 32個關鍵字
C++ 有22+10+11+20 = 63 個關鍵字
JAVA 有22+ 9+ 17 = 48 個關鍵字
參考資料:百度百科
編譯原理的作業,求助啊。
這是我查了之後東拼西湊寫到暑假作業本上的,僅供參考 求助電話:110使用條件:發生緊急突發狀況,需要報警、求助時使用方法:向接電話者迅速、準確、清晰地說明發生的事件、發生的時間、地點、現狀,並留下自己的...
編譯原理的種別碼
表示單詞的類別,提供給語法分析使用。一般用整數表示,比如標識符的種別碼為1,常數為2,保留字為3,運算符為4,界符為5。
token 編譯原理
形式表達式
編譯原理詞法分析程序
#include
#include
#include
#include
#include
using namespace std;
ifstream fp("source.txt",ios::in);
char cbuffer;
char *key[13]={"if","else","for","while","do","return","break","continue","int","void"
,"main","const","printf"}; //關鍵字
char *border[7]={ "," , ";" , "{" , "}" , "(" , ")" ,"//"}; //分界符
char *arithmetic[6]={"+" , "-" , "*" , "/" , "++" , "--"}; //運算符
char *relation[7]={"<" , "<=" , "=" , ">" , ">=" , "==" ,"!="}; //關係運算符
char *lableconst[80]; //標識符
int constnum=40;
int lableconstnum=0;
int linenum=1; //統計常數和標識符數量
int search(char searchchar[],int wordtype)
{
int i=0,t=0;
switch (wordtype)
{
case 1:
{ for (i=0;i<=12;i++) //關鍵字
{
if (strcmp(key[i],searchchar)==0)
return(i+1);
}
return(0);}
case 2:
{
for (i=0;i<=6;i++) &#......
編譯原理課程設計-詞法分析器設計(C語言)
#include "stdio.h" /*定義I/O庫所用的某些宏和變量*/
#include "string.h" /*定義字符串庫函數*/
#include "conio.h" /*提供有關屏幕窗口操作函數*/
#include "ctype.h" /*分類函數*/
char prog[80]={'\0'},
token[8]; /*存放構成單詞符號的字符串*/
char ch;
int syn, /*存放單詞字符的種別碼*/
n,
sum, /*存放整數型單詞*/
m,p; /*p是緩衝區prog的指針,m是token的指針*/
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner(){
m=0;
sum=0;
for(n=0;n<8;n++)
token[n]='\0';
ch=prog[p++];
while(ch==' ')
ch=prog[p++];
if(isalpha(ch)) /*ch為字母字符*/{
while(isalpha(ch)||isdigit(ch)) /*ch 為字母字符或者數字字符*/{
token[m++]=ch;
ch=prog[p++];}
token[m++]='\0';
ch=prog[p--];
syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0) /*字符串的比較*/{
syn=n+1;
break;}}
else
if(isdigit(ch)) /*ch是數字字符*/{
while(isdigit(ch)) /*ch是數字字符*/{
sum=sum*10+ch-'0';
ch=prog[p++];}
ch=prog[p--];
syn=11;}
else
swit......