Sicily 1000 詞法分析程式設計

2021-08-09 08:18:16 字數 1545 閱讀 3917

description

input

輸入一程式,結束符用」#」;

output

輸出單詞數對:《類號,序號》。 輸出識別符號表,用空格分隔; 輸出無符號整數表,用空格分隔;

sample input

main()

#

sample output

<1,1><3,0><3,1><3,2><1,0><4,0><2,2><5,0><3,4><4,1><2,2><5,1><3,5><1,2><5,0><2,1>

<4,1><2,0><4,0><3,5><3,3>

identifieres:a b

unsigned_integer:2 3

解:

用cin>>str讀入輸入,會以換行和空格分隔,讀入乙個字串後,先將其切分為若干個子字串(切分規則:連續的數字和字母不切開,其他的字元分開),再分別將子字串轉化為單詞對,識別符號和無符號整數第一次出現時放入表中,**:

#include#include#include#includeusing namespace std;

struct operators =; //運算子

struct boundaries =",",",";"} ; //分界符

struct identifieres=; //識別符號

struct unsigned_integer=; //無符號整數

bool isletter(char temp)

bool isdigit(char temp)

vector> split(string str)

} else if (isdigit(str[i]))

} else

} return temp;

}void dealletters(string str)

if (temp)

}if (temp1) }}

void dealdigits(string str)

}if (temp)

}bool dealothers(string str)

} for (int i = 0; i < 6; i++)

} return false;

}int main()

if (end == true) break;

} cout << "\nidentifieres:";

for (int i = 0; i< identifieres.number; i++) cout << identifieres.str[i] << " ";

cout << "\nunsigned_integer:";

for (int i = 0; i< unsigned_integer.number; i++) cout << unsigned_integer.str[i] << " ";

}

測試:

Sicily1000 詞法分析

input 輸入一程式,結束符用 output 輸出單詞數對 類號,序號 輸出識別符號表,用空格分隔 輸出無符號整數表,用空格分隔 輸入樣例 main 輸出樣例 1,1 3,0 3,1 3,2 1,0 4,0 2,2 5,0 3,4 4,1 2,2 5,1 3,5 1,2 5,0 2,1 4,1 2...

Sicily1000 自上而下語法分析(一)

輸入開始符號,非終結符,終結符,產生式,ll 1 分析表 輸出ll 1 分析表 g e e e t e t t t t f t f f f e d d x y z 消除左遞迴g1 e e ta a ta ta e t fb b fb fb e f e d d x y z input 輸入開始符號 非...

sicily 第一四分位點

在統計學中,第一四分位數返回統計數字中位於四分之一處的資料。假定下列函式的輸入v是未排序的統計資料,函式q1返回將v排序後的第一四分位數v k 及其位置,即向量v中位於 k 0.25 n 取整 處的元素及位置k。例如,v 1,2,3,2,3,2,4 則v排序後為 1,2,2,2,3,3,4 k 0....