編譯gn
㈠ 學了編譯原理這門課,要求編一個:詞法分析的程序,要求對詞法分析至少選擇三種不同類型的句子進行單詞識
給你一個toyl語言的
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#define is_end_of_input(ch) ((ch)=='#')
#define is_letter(ch) ('A'<=(ch)&&(ch)<='Z'||'a'<=(ch)&&(ch)<='z')
#define is_digit(ch) ('0'<=(ch)&&(ch)<='9')
#define is_digit_or_letter(ch) (is_letter(ch)||is_digit(ch))
#define is_operator(ch) ((ch)=='+'||(ch)='-'||(ch)='*')
#define is_layout(ch) (!is_end_of_input(ch)&&(ch)<=' ')
#define Step 10 //字元串每次增長的長度.
typedef struct
{
char * Class;
char seman[];
int len;
int value;
}mytoken;
typedef struct node
{
char words[20];
int length;
int time;
struct node *next;
}mynode;
//全局變數
char ch;
char *fp;
mytoken token;
int TYPE=-1;
int num=1;
int j=0;
int Length=0;
void error()//報錯
{
printf("錯誤\n");
}
char * getstr() //從鍵盤獲取任意長度的輸入函數實現
{
char *temp, *str=(char *)malloc(10);
int c=0, len=0, times=1, number=0;
if(!str)
{
printf("內存不足!");
return (char *)NULL;
}
number+=times*Step;
do //遇到#則輸入結束。
{
c=getchar();
if(len==number)
{
times++;
number=times*Step;
temp=str;
str=(char *)realloc(str,number);
if(str==NULL)
{
printf("內存不足!");
str=temp;
break;
}
}
*(str+len)=c;
len++;
}while(c!='#');
str=(char *)realloc(str,len+1); //字元串的最終長度調整.
*(str+len)='\0';
return str;
}
void next_char(void)//獲取下一個字元
{
ch=*fp;
fp=fp+1;
}
void next_valchar(void)//獲取第一個有效的字元,過濾空格等。
{
next_char();
if(ch=='#')exit(0);//當文件只有空格和#號時
while(is_layout(ch))
{
next_char();
//if(ch=='#')exit(0);
}
}
void back()//指針回走
{
fp=fp-1;
}
void recongnize_name(char chr)//識別字元串
{
char name[10];
int i=0;
name[i++]=ch;
next_char();
while(is_digit_or_letter(ch))
{
name[i++]=ch;
next_char();
}
if((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#')&&(ch!=':')&&(ch!='(')&&(ch!=')')&&(ch!=';'))//轉非法字元串處理
{
do
{
name[i++]=ch;
next_char();
}while((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#'));
if((name[i-1]=='#')||(name[i-1]=='\n'))//去掉結束符#或回車
{
name[i-1]='\0';
}
back();//指針回走
name[i]='\0';
printf("非法字元串\t%s\n",name);
}
else{
name[i]='\0';
if (name== "begin")
{
token.Class="BEGIN";
}
else if (name== "end")
{
token.Class="END";
}
else if (name=="read")
{
token.Class=="READ";
}
else if (name=="write")
{
token.Class="WRITE";
}
else
{
token.Class="IDEN";
int n=0;
Length=0;
while(name[n]!='\0')
{
token.seman[n]=name[n];
n++;
}
Length=n;
token.seman[n]=name[n];
}
back();
}
}
void recongnize_number(char cha)//識別數字
{
int N=0;
int m;
char name[10];//存非法字元串
int i=0;
while((m=is_digit(ch)))
{
N=N*10+(ch-'0');
name[i++]=ch;
next_char();
}
if(ch==' '||ch=='\t'||ch=='\n'||ch=='#'||(ch==';'))
{
token.Class="NUMB";
token.value=N;
back();
}
else//轉非法字元串處理
{
do
{
name[i++]=ch;
next_char();
}while((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#'));
if((name[i-1]=='#')||(name[i-1]=='\n'))//去掉結束符#或回車
{
name[i-1]='\0';
}
back();//指針回走
name[i]='\0';
printf("非法字元串\t%s\n",name);
TYPE=-1;
}
}
int next_token(void)//讀下一個單詞
{
next_valchar();
char name[10];//存首字母非法的字元串
int fg=0;
int i=0;
if('0'<=(ch)&&(ch)<='9')
{
TYPE=0;
}
else if('A'<=(ch)&&(ch)<='Z'||'a'<=(ch)&&(ch)<='z')
{
TYPE=1;
}
else
{
TYPE=2;
}
switch(TYPE)
{
case 0:
recongnize_number(ch);break;
case 1:
recongnize_name(ch);break;
case 2:
switch(ch)
{
case '+' :
token.Class="ADD";
token.seman[0]='+';
token.seman[1]='\0';
TYPE=2;
break;
case '*' :
token.Class="MULT";
token.seman[0]='*';
token.seman[1]='\0';
TYPE=2;
break;
case ':' :
next_char();
if(ch!='=')
{
error();
TYPE=-1;
break;
}
token.Class="ASS";
token.seman[0]=':';
token.seman[1]='=';
token.seman[2]='\0';
TYPE=2;
break;
case ';' :
token.Class="SEMI";
token.seman[0]=';';
token.seman[1]='\0';
TYPE=2;
break;
case '(' :
token.Class="OPEN";
token.seman[0]='(';
token.seman[1]='\0';
TYPE=2;
break;
case ')' :
token.Class="CLOSE";
token.seman[0]=')';
token.seman[1]='\0';
TYPE=2;
break;
default :
fg=1;
break;
}
}
if(fg==1)//非法字元串處理
{
name[i++]=ch;
while((ch!=' ')&&(ch!='\t')&&(ch!='\n')&&(ch!='#'))
{
next_char();
name[i++]=ch;
}
if((name[i-1]=='#')||(name[i-1]=='\n'))//去掉結束符#或回車
{
name[i-1]='\0';
}
back();//指針回走
name[i]='\0';
printf("非法字元串\t%s\n",name);
TYPE=-1;//置TYPE為-1
}
}
int compare(node *head,char words[],int Length)//單詞的比較
{
node *p;
p=head;
if(head==NULL)
{
return 0;
}
else
{
int fg=1;
do
{
int i,j,succ;
i=0;
succ=0;
while((i<=p->length-Length)&&(!succ))
{
j=0;
succ=1;
while((j<Length)&&succ)
{
if(words[j]==(p->words[i+j]))
{
j++;
}
else
{
succ=0;
}
}
i++;
}
if(succ&&(j>=p->length))
{
(p->time)++;
fg=0;
}
if(p->next!=NULL)
{
p=p->next;
}
}while((p->next!=NULL)&&fg);
if(fg==0)
{
return 1;
}
else
{
return 0;
}
}
}
node *insert(node *head) //將讀到的新單詞加入鏈表
{
node *p;
p=(mynode*)malloc(sizeof(mynode));/*分配空間*/
strcpy(p->words,token.seman);
int n=0;
p->length=0;
p->time=1;
while(p->words[n]!='\0')
{
p->length++;
n++;
}
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
p->next=head->next;
head->next=p;
}
return head;
}
void display(node *head)//列印鏈表的內容
{
node *p;
p=head;
if(!p) printf("\n無標識符!");
else
{
printf("\n各標識符或保留字及其出現的次數為:\n");
printf("標識符\t出現次數\n");
while(p) { printf("%s\t%d\n",p->words,p->time);p=p->next;}
}
}
int main(int argc, char *argv[])
{
char *str1=NULL;
printf("請輸入程序代碼:\n");
str1=getstr();//獲取用戶程序段的輸入
fp=str1;
mynode *head=NULL;
do{
next_token();
switch(TYPE)
{
case 0:
printf("[%d]\t(%s,\t\"%d\")\n",num++,token.Class,token.value);
break;
case 1:
case 2:
printf("[%d]\t(%s,\t\"%s\")\n",num++,token.Class,token.seman);
int f;
f=0;
f=compare(head,token.seman,Length);
if((TYPE==1)&&(f==0))
{
head=insert(head);
}
break;
default:
break;
}
}while(*fp!='#');
display(head);
return 0;
}
㈡ 單片機 按鍵秒錶
你好!我這有份資料,希望對你有用!99秒馬表設計1. 實驗任務
(1. 開始時,顯示「00」,第1次按下SP1後就開始計時。
(2. 第2次按SP1後,計時停止。
(3. 第3次按SP1後,計時歸零。2. 電路原理圖
圖4.17.13. 系統板上硬體連線(1. 把「單片機系統」區域中的P0.0/AD0-P0.7/AD7埠用8芯排線連接到「四路靜態數碼顯示模塊」區域中的任一個a-h埠上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,……,P0.7/AD7對應著h。 (2. 把「單片機系統」區域中的P2.0/A8-P2.7/A15埠用8芯排線連接到「四路靜態數碼顯示模塊」區域中的任一個a-h埠上;要求:P2.0/A8對應著a,P2.1/A9對應著b,……,P2.7/A15對應著h。 (3. 把「單片機系統「區域中的P3.5/T1用導線連接到」獨立式鍵盤「區域中的SP1埠上; 4. 程序框圖
主程序框圖T0中斷服務程序框圖 圖4.17.2 5. 匯編源程序
TCNTA EQU 30H
TCNTB EQU 31H
SEC EQU 32H
KEYCNT EQU 33H
SP1 BIT P3.5
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV KEYCNT,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV TCNTA,#00H
MOV TCNTB,#00H
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMP WT
DELY10MS:
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:
INC TCNTA
MOV A,TCNTA
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOV A,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC SEC
MOV A,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
㈢ c語言 gcc編譯器下 time()報錯如何解決
time_t.TOxxx();//改變時間格式,然後應用新的時間格式列印就可以了,如printf("%s",time().ToString);
㈣ 易語言是什麼
易語言是一門計算機編程語言。以「易」著稱,以中文作為程序代碼表達的語言形式。易語言的創始人是吳濤。早期版本的名字為E語言。易語言最早的版本的發布可追溯至2000年9月11日。創造易語言的初衷是進行用中文來編寫程序的實踐。從2000年至今,易語言已經發展到一定的規模,功能上、用戶數量上都十分可觀。2015年計劃推出移動版編程工具,用於編譯安卓系統手機APP!
優缺點
語言優點
易語言功能強大實用,現已具有數十個各種應用范圍支持庫、上百個數據類型和界面組件、近萬條支持命令,支持現今所有資料庫,功能絲毫不比其它同類產品差。模塊化開發支持大型軟體項目的分工協作,易語言中的模塊稱為易模塊。通過使用易模塊,用戶可以將常用的代碼封裝起來重復使用到其它程序,或提供給第三方使用,或用作開發大型軟體項目中的某個部分,然後在軟體項目的封裝階段將所有這些模塊組織編譯成為一個完整程序。
易語言系統全部自行設計開發。自有編譯器。所編譯目的程序運行速度快,且沒有安全隱患。自帶小型資料庫,減少開發項目投入成本,且容易學習。跨操作系統平台編程。同時支持Windows和Linux程序開發。中文本地化支持。支持中文格式日期和時間處理、漢字發音處理、全半形字元處理、人民幣金額處理、農歷日期轉換等。
易語言自帶的即時幫助系統,在易語言使用者有問題時,輕輕一點,立刻可以得到與當前主題相關的詳細幫助。易語言的幫助文檔眾多,內有大量知識庫及開發資料。易語言的常式眾多,可以在資源網、大賽展區、論壇上搜索到。易語言愛好者交流論壇,上面已有數萬名注冊用戶。易語言使用者可以將自己在使用過程中所遇到的問題提出,專家會以最快的速度答復。通過論壇搜索功能,也可得到需要的答案。通過易語言的圖書,教學片,多媒體教學光碟等。易語言自帶的即時幫助系統,在易語言使用者有問題時,輕松一點,立刻可以得到與當前主題相關的詳細幫助。
語法格式自動檢查。自動檢查並提示所輸入語句的語法格式是否正確,且可自動添加各類名稱。全程提示與幫助。滑鼠停留立即顯示相關項目提示。編程時提示語法格式,調試時提示變數當前內容,隨時按下F1鍵可得到與當前主題相關詳細幫助等。名稱自動管理。用戶修改任一名稱定義,其它所有包含該名稱的程序代碼均自動修正。集成化開發環境。集界面設計、代碼編寫、調試分析、編譯打包等於一體。
語言缺點
易語言是收費軟體。雖然有一些編程的軟體需要注冊後使用,但是其收費方式與其它編譯軟體不同,易語言必須注冊後才可編譯出程序,否則只可在編譯中調試。(如右圖)
收費後編譯
官方注冊版就達到了618元(企業加密版)。
雖然如此,但是易語言5.0正式版已經支持了靜態編譯,被誤報的可能性減小,而且編譯的文件大小也大大縮小!
另外,由於易語言程序的運行方式存在特殊性,單個空白程序就達到400~500KB,當前易語言拓展插件:斬月,黑月的一些模塊可以把易語言編譯的程序縮小,縮小後的空白程序僅為10Kb左右。易語言編寫的程序被許多殺毒軟體的高級啟發式技術誤報為病毒,甚至一個不包含任何代碼的空白程序都會被一些殺毒軟體識別為木馬。至今,有關各方都在積極解決這個問題,但是截止目前(2014年7月),誤報問題仍然存在。
關於易語言誤報問題,實踐證明:並非易語言生成出來的程序容易誤報,VB單獨生成的空窗口也報毒,C++也同樣出現誤報現象。
當然,也有一些不正當利用易語言編寫的程序例如:盜號,木馬,鍵盤監控的程序,然後尋求解除誤報的方法,這樣是沒用的,程序本身就存在危害,報毒也屬於正常現象。
㈤ 為什麼會出現"編譯錯誤:無效外部過程
Private Sub Command1_Click()Label1.Caption = ""For a = 0 To 20 For b = 0 To 33 c = 100 - a - b If 15 * a + 9 * b + c = 300 Then Label1.Caption = Label1.Caption & "公雞母雞小雞各" & a & "," & b & "," & c & " 只 " & <a href="https://www..com/s?wd=vb&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">vb</a>CrLf '<a href="https://www..com/s?wd=vb&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">vb</a>crlf是在同一行的 End If <a href="https://www..com/s?wd=Next&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank"class="-highlight">Next</a><a href="https://www..com/s?wd=Next&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">Next</a>End Sub
㈥ 銳浪報表 用易語言調試的時候不報錯,編譯後運行報錯
你主要是用了外來組件,易語言本身沒有這個.你需要安裝這個外來組件
打開易語言
點擊 工具
點擊 類型庫或OCX組件->支持庫
點擊 注冊組件
找到 "gregn50.dll" 如果沒有自己去網上找
然後確定.
然後 工具-->支持庫配置 找到 銳浪報表,選中確定應該就可以了
注:安裝好後,那個DLL文件位置不能動,動了需要重新安裝.
㈦ 怎樣用命令行在TC中編譯程序
Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
Syntax is:
TCC [options] file[s]
[ * = default; -x- = turn switch x off ]
[options]
-1 80186/286 Instructions
-2 80286 Protected Mode Inst.
-Ax Disable extensions
-B Compile via assembly
-C Allow nested comments
-Dxxx Define macro
-Exxx Alternate Assembler name
-G Generate for speed
-Ixxx Include files directory
-K Default char is unsigned
-Lxxx Libraries directory
-M Generate link map
-N Check stack overflow
-O Optimize jumps
-P Force C++ compile
-Qxxx Memory usage control
-S Proce assembly output
-Txxx Set assembler option
-Uxxx Undefine macro
-Vx Virtual table control
-X Suppress autodep. output
-Yx Overlay control
-Z Suppress register reloads
-a Generate word alignment
-b * Treat enums as integers
-c Compile only
-d Merge plicate strings
-exxx Executable file name
-fxx Floating point options
-gN Stop after N warnings
-iN Max. identifier length
-jN Stop after N errors
-k Standard stack frame
-lx Set linker option
-mx Set Memory Model
-nxxx Output file directory
-oxxx Object file name
-p Pascal calls
-r * Register variables
-u * Underscores on externs
-v Source level debugging
-wxxx Warning control
-y Proce line number info
-zxxx Set segment names
㈧ gn的語言是允許0開頭的非負數
(1)S->a || aS
a->0 || 2 || 4 || 6 || 8
(2)
S->2S || 4S || 6S || 8S || B || 空
B->a || aB
a->0 || 2 || 4 || 6 || 8
㈨ Dev-c++編譯器怎麼用請各位前輩解答一下
上面的三個是編譯和運行,一般我是按F9,就直接編譯運行了,新建一個c++源程序,點文件新建那,有源程序和工程,就ok啦