2017-04-17 42 views
0

所以我寫一個小語言,我使用antlrv4作爲我的工具。當你編譯你的語法文件(.g4)時,Antlr自動生成詞法分析器和解析器文件。我正在使用javac btw。我想我的語言沒有分號,我想這樣做的方式是:如果在一行中有一個標識符或「)」作爲最後一個標記,詞法分析器會自動輸入分號(類似於「go」語言一樣)。我將如何處理這樣的事情?在詞法分析器文件中還有其他的東西,比如ATN(我認爲是擴充的轉換網絡)和dfa(我認爲它是確定性有限自動機),我不明白它們與lexing過程之間的關係。任何幫助表示讚賞。 (順便說一句,我仍然在研究語法文件,所以我沒有完全完成)。修改ANTLR v4自動生成的詞法分析器?

回答

0

這裏有幾點:ATN和DFA是解析器+詞法分析器的內部結構,而不是你想要改變解析行爲的東西。另外,我不清楚爲什麼你想讓詞法分析器在某個時候插入一個分號。你到底想做什麼(不要說:在分析器中使分號是可選的,我的意思是潛在的原因)。

如果你想在無尾隨分號接受命令,你可以使可選:

assignment: simpleAssignment | complexAssignment SEMI?; 

分析器會給你分配規則的內容,無論是否有尾隨分號與否。那是你要的嗎?

+0

我不想要分號,因爲我相信它們主要是針對解析器的嗎?我想到了你的建議,使得它在解析器語法中是可選的,但分號也標記了行或語句的結尾。例如:假設我有print p5abc並且比下一行有打印10.分析器如何知道下一行中的print 10不是第一行中的字符串的一部分。即字符串isnt p5abcprint10?通過自動添加分號,我可以省略它們在程序中的使用,同時仍然保留分號的功能?我希望這是有道理的。 :( – vaish

相關問題