内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

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

#include iostream

創(chuàng)新互聯(lián)堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。10年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營(yíng)銷服務(wù)商,為您提供網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站設(shè)計(jì)、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語言編一個(gè)詞法分析器

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

一個(gè)簡(jiǎn)單的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)號(hào); 其中語句標(biāo)號(hào)是按標(biāo)識(shí)符規(guī)定書寫的符號(hào), 放在某一語句行的前面,標(biāo)號(hào)后加冒號(hào)(:)。語句標(biāo)號(hào)起標(biāo)識(shí)語句的作用,與goto 語句配合使用。

如: label: i++;

loop: while(x7);

goto loop;

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

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

擴(kuò)展資料:

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

統(tǒng)計(jì)從鍵盤輸入一行字符的個(gè)數(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'時(shí)即執(zhí)行n++進(jìn)行計(jì)數(shù)。

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

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

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

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

廣告

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

成都seo排名網(wǎng)站優(yōu)化
芒康县| 社旗县| 武隆县| 鹤壁市| 休宁县| 黄陵县| 青川县| 南开区| 鞍山市| 佛学| 隆安县| 云霄县| 喀喇沁旗| 湘潭市| 孟连| 玉环县| 即墨市| 无极县| 丰台区| 晋宁县| 和田市| 东源县| 石阡县| 长海县| 广安市| 江安县| 长治县| 徐闻县| 东莞市| 淮阳县| 常州市| 民权县| 铜陵市| 静宁县| 分宜县| 宁夏| 弥勒县| 江口县| 南江县| 井冈山市| 谷城县|