2012-04-12 49 views
0

我嘗試構建一個支持x,y,+, - ,*,/(,)的非常簡單的計算器。這個想法是簡單的:從輸入字符串以提升精神分離AST創建和計算

  1. 生成語法樹(其可以是:「X + 3Y」)
  2. 對於給定的X,Y計算通過解析語法樹,並插入對於x整數結果和y。

使用boost 1.46,您可以使用parse_phrase()一次輕鬆完成這兩個步驟。但是,我必須執行第二步100萬次,而解析不會改變。所以我想分開這個(就像在經典的精靈版本中一樣)。我怎樣才能做到這一點? (請注意:boost 1.46還沒有utree數據結構)

回答

2

我得到了一個解決方案,同時。這很簡單,看看the boost docs linked here

的main()函數包含以下代碼:

expression_ast ast; 
ast_print printer; 
bool r = phrase_parse(iter, end, calc, space, ast); 

if (r && iter == end) 
{ 
    // [...] 
    printer(ast); 
    // [...] 
} 

實際上有多個phrase_parse()的升壓功能。沒有和「phrase_parse的變體和額外的參數:解析器的屬性」有不同的phrase_parse,如in the boost docs所述。在上面的代碼中,ast是解析器的屬性;然後printer評估ast。

如果我們想從外部評估打印機的不同數值,我們會在每次打印printer(ast)之前將它們傳遞給打印機。

注意1.46:目前還沒有boost::utree。然而,在這個例子中AST是全功能的替代品。