自從畢業以來我一直沒有正式使用建築語言或解析器,並且忘記了當時我所知道的大部分內容。我現在有一個可能從這樣的事情中受益的項目,但我不知道如何處理以下情況。野牛和語法:回放解析堆棧
假設在我想解析的語言中,有一個表示「在表達式中生成隨機浮點數」的標記。
exp: NUMBER
{$$ = $1;}
| NUMBER PLUS exp
{$$ = $1 + $3;}
| R PLUS exp
{$$ = random() + $3;}
;
我也想要一個「list」生成操作符,它將重新評估一個「exp」次數。可能是這樣的:
listExp: NUMBER COLON exp
{
for (int i = 0; i < $1; i++) {
print $3;
}
}
;
我看到的問題是「exp」在循環開始時已經減少了。如果我有輸入
2 : R + 2
那麼我想作爲「EXP」被解析和2加入到將產生的隨機數 - 可以說,結果是2.0055。然後在列表表達式中,我認爲2.0055會打印出兩次。
有沒有辦法在評估之前標記「exp」,然後按照列表循環計數的要求多次解析它?這個想法是在每次評估中得到一個不同的隨機數。