魔王語言翻譯
問題描述:
魔王的語言是由以下兩種形式的規則由人的語言逐步抽象上去的。
(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 在這兩種形式中,從左到右均表示解釋。試寫乙個魔王語言的解釋系統,...