我有一些野牛語法:如何讓Bison/YACC在分析整個字符串之前不識別命令?
input: /* empty */
| input command
;
command:
builtin
| external
;
builtin:
CD { printf("Changing to home directory...\n"); }
| CD WORD { printf("Changing to directory %s\n", $2); }
;
我不知道我怎麼弄,直到它讀取所有輸入的野牛不接受(YYACCEPT?)的東西作爲command
。因此,我可以在下面的所有規則中使用遞歸或其他任何方法來構建事物,這會導致有效的命令或某些不起作用的事情。
我正在用上面的代碼做一個簡單的測試,就是輸入「cd mydir mydir」。野牛解析CD
和WORD
並且「嘿!這是一個命令,把它放在最上面!」。然後找到的下一個標記只是WORD
,它沒有規則,然後報告錯誤。
我希望它能夠讀取整行,並且實現CD WORD WORD
不是一個規則,然後報告錯誤。我想我錯過了一些明顯的東西,非常感謝任何幫助 - 謝謝!
此外 - 我試過使用input command NEWLINE
或類似的東西,但它仍然推動CD WORD
頂部作爲一個命令,然後分別解析額外WORD
。
看起來你的'內建函數應該由換行符(而不是'輸入')終止。正如'CD WORD NEWLINE' – leeeroy 2010-04-08 16:08:59
你的'內建'缺少一個'{',應該''| CD WORD {printf(「更改爲directroy%s \ n」,$ 2); }' – 2010-04-08 16:35:49
哎呀抱歉!這不是我用來測試的代碼... – chucknelson 2010-04-08 16:48:57