成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go實(shí)現(xiàn)c語言詞法分析 c語言goats

編制C語言子集的詞法分析程序

#include iostream

創(chuàng)新互聯(lián)堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。10年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務(wù)商,為您提供網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站設(shè)計、HTML5、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、微信小程序定制開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。

#include string

using namespace std;

string key[6] = {"begin", "if", "then", "while", "do", "end"};

//關(guān)鍵字

bool isKey( string str, int syn) //判斷是否為關(guān)鍵字,若是傳回相

應(yīng)關(guān)鍵碼的種別名

{

int i;

for(i=0; i6; i++)

{

if(str == key[i])

{

syn = i + 1;

return true;

}

}

return false;

}

bool isLetter(char c) //是否為字母

{

if((c = 'A' c = 'Z') || (c = 'a' c = 'z'))

return true;

else

return false;

}

bool isDigit(char c) //是否為數(shù)字

{

if(c = '0' c = '9')

return true;

else

return false;

}

void analyse(FILE *fileP)

{

int n;

char c;

string str = "";

while((c = fgetc(fileP)) != EOF)

{

if(c == ' ' || c == '\n' || c == '\t')

continue;

else if(isDigit(c)) //數(shù)字

{

while(isDigit(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

cout "(11, " str ")" endl;

str = "";

}

else if(isLetter(c)) //字母開頭的

{

while(isDigit(c) || isLetter(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

if(isKey(str, n))

cout "(" n ", " str ")" endl; //關(guān)鍵碼

else

cout "(10, " "\'" str "\'" ")" endl; //標(biāo)志符

str = "";

}

else //操作符等

{

switch(c)

{

case '+':

cout "(13, +)" endl;

break;

case '-':

cout "(14, -)" endl;

break;

case '*':

cout "(15, *)" endl;

break;

case '/':

cout "(16, /)" endl;

break;

case ':':

{

if(c=fgetc(fileP) == '=')

cout "(18, :=)" endl;

else

{

cout "(17, :)" endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '':

{

c=fgetc(fileP);

if(c == '=')

cout "(22, =)" endl;

else if(c == '')

cout "(21, )" endl;

else

{

cout "(20, )" endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '':

{

c=fgetc(fileP);

if(c == '=')

cout "(24, =)" endl;

else

{

cout "(23, )" endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '=':

cout "(25, =)" endl;

break;

case ';':

cout "(26, ;)" endl;

break;

case '(':

cout "(27, ()" endl;

break;

case ')':

cout "(28, ))" endl;

break;

case '#':

cout "(0, #)" endl;

break;

}

}

}

}

int main()

{

FILE *fileP;

fileP = fopen("test.txt", "r");

cout "------詞法分析如下------" endl;

analyse(fileP);

return 0;

}

怎么用c語言編一個詞法分析器

簡而言之就是先畫一個狀態(tài)圖,然后根據(jù)圖來編碼就行

一個簡單的xml的詞法分析器供參考

#include

stdio.h

#include

stdlib.h

#include

string.h

typedef

struct

{

char

*p;

int

len;

}

xml_Text;

typedef

enum

{

xml_tt_U,

/*

Unknow

*/

xml_tt_H,

/*

Head

?xxx?*/

xml_tt_E,

/*

End

/xxx

*/

xml_tt_B,

/*

Begin

xxx

*/

xml_tt_BE,

/*

Begin

End

xxx/

*/

xml_tt_T

/*

Text

xxx

*/

}

xml_TokenType;

typedef

struct

{

xml_Text

text;

xml_TokenType

type;

}

xml_Token;

int

xml_initText(xml_Text

*pText,

char

*s)

{

pText-p

=

s;

pText-len

=

strlen(s);

return

0;

}

int

xml_initToken(xml_Token

*pToken,

xml_Text

*pText)

{

pToken-text.p

=

pText-p;

pToken-text.len

=

0;

pToken-type

=

xml_tt_U;

return

0;

}

int

xml_print(xml_Text

*pText)

{

int

i;

for

(i

=

0;

i

pText-len;

i++)

{

putchar(pText-p[i]);

}

return

0;

}

int

xml_println(xml_Text

*pText)

{

xml_print(pText);

putchar('\n');

return

0;

}

int

xml_getToken(xml_Text

*pText,

xml_Token

*pToken)

{

char

*start

=

pToken-text.p

+

pToken-text.len;

char

*p

=

start;

char

*end

=

pText-p

+

pText-len;

int

state

=

0;

pToken-text.p

=

p;

pToken-type

=

xml_tt_U;

for

(;

p

end;

p++)

{

switch(state)

{

case

0:

switch(*p)

{

case

'':

state

=

1;

break;

default:

state

=

7;

break;

}

break;

case

1:

switch(*p)

{

case

'?':

state

=

2;

break;

case

'/':

state

=

4;

break;

default:

state

=

5;

break;

}

break;

case

2:

switch(*p)

{

case

'?':

state

=

3;

break;

default:

state

=

2;

break;

}

break;

case

3:

switch(*p)

{

case

'':

pToken-text.len

=

p

-

start

+

1;

pToken-type

=

xml_tt_H;

return

1;

default:

state

=

-1;

break;

}

break;

case

4:

switch(*p)

{

case

'':

pToken-text.len

=

p

-

start

+

1;

pToken-type

=

xml_tt_E;

return

1;

default:

state

=

4;

break;

}

break;

case

5:

switch(*p)

{

case

'':

pToken-text.len

=

p

-

start

+

1;

pToken-type

=

xml_tt_B;

return

1;

case

'/':

state

=

6;

break;

default:

state

=

5;

break;

}

break;

case

6:

switch(*p)

{

case

'':

pToken-text.len

=

p

-

start

+

1;

pToken-type

=

xml_tt_BE;

return

1;

default:

state

=

-1;

break;

}

break;

case

7:

switch(*p)

{

case

'':

p--;

pToken-text.len

=

p

-

start

+

1;

pToken-type

=

xml_tt_T;

return

1;

default:

state

=

7;

break;

}

break;

default:

pToken-text.len

=

p

-

start

+

1;

pToken-type

=

xml_tt_T;

return

1;

}

}

return

0;

}

int

main()

{

int

ret

=

0;

xml_Text

xml;

xml_initText(xml,

"?xml?root

ss

hahahoho/haha/root");

xml_Token

token;

xml_initToken(token,

xml);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

ret

=

xml_getToken(xml,

token);

printf("ret=%d;text=",ret);

xml_print(token.text);

printf(";type=%d;\n\n",

token.type);

return

0;

}

c語言中 go to語句的使用方法

goto語句也稱為無條件轉(zhuǎn)移語句,其一般格式如下: goto 語句標(biāo)號; 其中語句標(biāo)號是按標(biāo)識符規(guī)定書寫的符號, 放在某一語句行的前面,標(biāo)號后加冒號(:)。語句標(biāo)號起標(biāo)識語句的作用,與goto 語句配合使用。

如: label: i++;

loop: while(x7);

goto loop;

C語言不限制程序中使用標(biāo)號的次數(shù),但各標(biāo)號不得重名。goto語句的語義是改變程序流向, 轉(zhuǎn)去執(zhí)行語句標(biāo)號所標(biāo)識的語句。

goto語句通常與條件語句配合使用??捎脕韺?shí)現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán),跳出循環(huán)體等功能。

擴(kuò)展資料:

go to在C語言中的應(yīng)用:

統(tǒng)計從鍵盤輸入一行字符的個數(shù)。

#includestdio.h

int?n=0;

int?main(void)?{

printf("input?a?string:?");

? loop:?if?(getchar()!='\n')?{

n++;

?goto?loop;

}

printf("output:?%d\n",n);

}

例如輸入:abcdefghijklmnopqrstuvwxyz

然后回車Enter

輸出:26

本例用if語句和goto語句構(gòu)成循環(huán)結(jié)構(gòu)。當(dāng)輸入字符不為'\n'時即執(zhí)行n++進(jìn)行計數(shù)。

然后轉(zhuǎn)移至if語句循環(huán)執(zhí)行,直至輸入字符為'\n'才停止循環(huán)。

參考資料:百度百科-go to 語句

本文名稱:go實(shí)現(xiàn)c語言詞法分析 c語言goats
分享地址:http://jinyejixie.com/article30/doppgpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站維護(hù)網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、微信小程序、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
贵定县| 中方县| 绥棱县| 雷山县| 巴彦淖尔市| 富源县| 阜平县| 绥滨县| 赤峰市| 南平市| 霍邱县| 晋州市| 石台县| 博客| 湟中县| 琼结县| 鹤岗市| 泸水县| 和顺县| 临朐县| 德保县| 南开区| 兴化市| 湘阴县| 余干县| 涪陵区| 柳州市| 宜阳县| 塔河县| 丰镇市| 伊金霍洛旗| 鹰潭市| 宁夏| 申扎县| 柳江县| 竹山县| 库伦旗| 柯坪县| 海南省| 彭山县| 龙岩市|