魔王語言翻譯

2021-08-14 03:32:25 字數 1509 閱讀 4133

魔王語言翻譯

問題描述:

魔王的語言是由以下兩種形式的規則由人的語言逐步抽象上去的。

(1)α–>β(1)β(2)β(3)….β(m)

(2)(θδ(1)δ(2)δ(3)…δ(n))–>θδ(n)θδ(n-1)…θδ(1)θ

(括號內數字為下標),上面的規則中,從左到右表示將魔王的語言翻譯**類的語言。魔王語言和人類語言按照該語法規則進行轉換。設大寫字母表示魔王語言詞彙,小寫字母表示人類語言詞彙。上述的希臘文法式中,希臘字母表示可以用大寫字母或小寫字母代換的變數。魔王語言可以包含人類詞彙。

(1)b–>tada

(2)a–>sae

編寫乙個魔王語言的翻譯系統,把魔王的話翻譯**類語言。

題目分析:

魔王的語言組成是這樣的:由大寫字母組成;由小寫字母組成;由大寫小寫字母混合組成;由包括括號的字母組成。其中大寫字母與小寫字母的關係為:b–>tada,a–>sae。因此魔王語言中的大寫字母只能包含a和b兩個。

例如:

b翻譯為:tsaedsae;

(abc)翻譯為:acaba;

a(aasc)b翻譯為:sae saec saes saea sae tsaedsae(沒有空格,只是為了看著更清晰明了)

計算機實現

我們可以這樣考慮,將輸入的魔王語言從右至左進棧,每次從棧頂彈出乙個元素,進而對該元素處理,重點是對括號內的元素進行處理。

如果遇到左括號(,則要將括號裡的內容從棧中取出,按語法規定的順序從右至左進入乙個新棧,在每次從棧頂彈出乙個元素,遞迴呼叫該處理過程。

程式如下:

#include

"stdio.h"

#define stack_init_size 20

#define stackincrement 10

typedef char elemtype;

typedef structsqstack;

initstack(sqstack *s)

//進棧操作

push(sqstack *s,elemtype e)

//出棧操作

pop(sqstack *s,elemtype *e)

//獲得棧的大小

int stacklen(sqstack *s)

void translate(elemtype e,sqstack *s)

push(&ss1,a);

//翻譯括號裡的內容

while(stacklen(ss1))

}

}main()

scanf("%c",&e);

}initstack(&s2); //初始化s2

while(stacklen(s1))

printf("the mankind language is:\n");

//最終輸入的魔王語言存放在棧s2中,處理棧頂元素進行翻譯

while(stacklen(s2))

getche();

}

魔王語言解釋

問題描述 有乙個魔王總是使用自己的一種非常精練而抽象的語言講話,沒人能聽的懂。但他的語言是可以逐步解釋 能懂得語言的,因為他的語言是由以下兩種形式的規則由人的語言逐 步抽象上去的 1 1 2.n 2 1 2.n n n 1.1 在這兩種形式中,從左到右均表示解釋 從右到左表示抽象。試寫乙個魔王解釋系...

C語言魔王語言解釋

由於是小白,所以剛開始沒有用已有的出棧與入棧函式以及出佇列與入佇列函式,而是自己寫的。如果 不對的話,歡迎指正。include include include define stack init size 100 define stackincerement 10 棧的順序儲存表示 typedef ...

資料結構魔王語言問題

出處 問題描述 有乙個魔王總是使用自己的一種非常精練而又抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋 能聽懂的語言,因為他的語言是由以下兩種形式的規則由人的語言逐步抽象上去的 1 1 2 m 2 1 2 n n n 1 1 在這兩種形式中,從左到右均表示解釋。試寫乙個魔王語言的解釋系統,...