我一直在嘗試編寫一種語言翻譯器,使用flex和yacc與C.通常我以某種方式完成它,但我發現自己不理解一些重要的事情以完成它。yacc語法規則的語義
所有我似乎無法理解下面的語法規則是如何工作的
聲明列表→申報表聲明
本地報關→本地報關申報的第一
我在這裏看到一個例子How do i implement If statement in Flex/bison在「陳述語句」,引用:
struct AstElement* makeStatement(struct AstElement* result, struct AstElement* toAppend)
{
if(!result)
{
result = checkAlloc(sizeof(*result));
result->kind = ekStatements;
result->data.statements.count = 0;
result->data.statements.statements = 0;
}
assert(ekStatements == result->kind);
result->data.statements.count++;
result->data.statements.statements = realloc(result->data.statements.statements, result->data.statements.count*sizeof(*result->data.statements.statements));
result->data.statements.statements[result->data.statements.count-1] = toAppend;
return result;
}
但我不知道它是否與其他規則一樣,另外,我想了解我在做什麼,而不僅僅是複製。
我的第二個問題是在下面的語法規則
聲明→型規格標識; | type-spec id [num];
類型說明符→INT
我在這裏獲得了整點,它是什麼,它應該做什麼等等,但我無法將認識轉化爲代碼和C
您應該編寫代碼,以便在您的程序符合規則時執行任何操作。 – immibis
嗯,我知道這很多。我覺得我需要的代碼是特定的,但是。 – codeNewbie
當程序符合規則時,您希望程序執行什麼操作? – immibis