我試圖用flex和野牛,使一個小的編譯器,但我沒有得到如何給行動爲每個規則如何給行動爲每個規則野牛
我的語法是這樣的:
%union{
std::string *s;
};
%start program
%type <s> expr
%token <s> KEYWORD
%token <s> VARIABLE
%%
program : KEYWORD {std::cout << "A"; }
| KEYWORD VARIABLE {std::cout << "B"; }
可變正則表達式是〔A-ZA-Z0-9]
「帽」 是我的關鍵字
如果我給輸入爲 「大寫鎖定」(帽= KEYWORD和鎖= VARIABLE) 我是越來越outpu噸爲「B」
如果我給輸入作爲帽然後它等待,直到我進入下一字和輸入任何下一個字之後,如果下一個輸入是帽打印「Asyntax錯誤」。
問題是它會等待,直到下一個輸入是考慮到打印,它仍然打印出是否存在錯誤語法錯誤
我沒有得到什麼不對的地方有人可以發現其中的錯誤在裏面。
所以,你得到一個印,但不是B?這意味着你將關鍵字識別爲東西,但顯然不是變量。這個問題不在語法中 - 它在詞法分析器中,你沒有顯示。您應該考慮在您的打印中添加換行符。 (這也很不尋常 - COBOL就像 - 使用'-'作爲變量名稱中的字符,你是否指'Z'和'0'之間的'_'?)你確定你可以打開詞法診斷打印分析器,所以你可以看到令牌流返回到語法?如果可以的話,它會使生活更容易。 –
如何打開在柔性印刷診斷和我沒有在詞法分析器打印任何東西 –
你必須提供在Flex代碼控制我如何添加一個換行符。它不是默認提供的。但是,能夠查看詞法分析器返回的內容通常可以幫助調試語法。 –