我在ANTLRWorks 1.4中有以下語法。我在文字冒險遊戲創作者中玩弄解析器的實現,在這裏用戶將爲他的遊戲指定各種允許的命令。是否有可能將「關鍵字」也視爲「非關鍵字」的語法?
grammar test;
parse : cmd EOF;
cmd : putSyn1 gameObject inSyn1 gameObject;
putSyn1 : Put | Place | Drop ;
inSyn1 : In | Into | Within;
gameObject : det obj;
det : The | A | An | ;
obj : Word obj | Word;
Space : (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;};
Put : 'put';
Place : 'place';
Drop : 'drop';
In : 'in';
Into : 'into';
Within : 'within';
The : 'the';
A : 'a';
An : 'an';
Word : ('a'..'z' | 'A'..'Z')+;
我只是感受到了各種微妙之處(像我做的here)。
這一次,使用ANTLR,我想知道如果我可以分析的輸入,如:
put wood in fire place
也就是說,「木」和「火的地方」都高於gameObjects。然而,「地點」也是「放」的同義詞。所以這同樣有效:
place wood in fire place
當試圖解析最後的「地點」標記時,ANTLR給了我一個NoViableAltException。我想將「火場」識別爲一個遊戲對象。
在ANTLR中,這種事情是可能的嗎?語法可能嗎?
另一方面,我正在開發一個手動實現,它使用一個奇怪的自定義數據結構,包含NFA,Dictionary和whatnot。但是我仍然需要更多的時間,並且必須犧牲一些腦細胞來設計所需的搜索插入算法。
但是,如果這是可能的ANTLR,我可以使用生成的C#文件,呀?
也許你的例子只是一個例子,但是,對於這個特別的,你可以使用'壁爐'(一個字)而不是'火的地方' – 2010-10-02 14:33:51
嗯,這是一個文字冒險_creator_,而我希望能夠讓用戶在他創建的房間中擁有多個文字遊戲對象。 – Rao 2010-10-02 14:36:43