我想爲進程代數創建解析器。該進程代數的語法如下:解析器進程代數
System=P:[s,l]|(P:[s,l']|P:[s,l])\{a,b}
如何我可以檢查一個字符串語句語法如下???一些僞代碼會非常有幫助。
我想爲進程代數創建解析器。該進程代數的語法如下:解析器進程代數
System=P:[s,l]|(P:[s,l']|P:[s,l])\{a,b}
如何我可以檢查一個字符串語句語法如下???一些僞代碼會非常有幫助。
在一般情況下,您不能使用正則表達式來完成此任務,因爲您有嵌套的構造(括號表達式)。你至少需要所謂的「push-down automaton」的力量。
要解決此問題,您需要識別過程語言的語法的所謂「parser」。
你有語言的語法規範嗎?你可以用ANTLR這樣的工具來表達語法。
研究這個谷歌搜索的結果:Java Parser Generators
thanx爲您的答案。但如果我嘗試通過我自己來實現它,我會怎麼做? 就像我看到的那樣,我會通過語法給我的操作符來分割字符串。 – 2011-06-03 22:25:17
從頭開始編寫解析器是一項很好的練習,可以教你很多關於它們的工作方式。這是一個功課問題嗎?如果是這樣,請標記爲這樣。也許編寫解析器最「直接」的方法是編寫所謂的「遞歸下降」解析器。通過這種方法,你基本上可以用一堆相互遞歸的函數遍歷字符串。在解析之前,將輸入字符分解爲令牌是一個好主意,這被稱爲「詞法分析」,並且是稱爲「詞法分析器」的工作。 – 2011-06-03 22:29:04
thanx爲您的答案。但如果我嘗試通過我自己的方式來實現它,我會怎麼做?就像我看到的那樣,我會通過語法給我的操作符來分割字符串。我試圖做的僞代碼: String solvePS(Population){ if(Population!= <>){Population has'('and')'){..} if(Population has'% '){....} else if(expr.contains(「|」)){ String [] table = expr.split(「|」); (expr matches(「[a-zA-Z] *:\\ [[a-zA-Z] *,[a-zA-Z] * \\]」)){ ... } } return「」; } – 2011-06-03 22:32:38
你可以使用正則表達式做到這一點很容易地。這個網站有很多關於他們的信息:regular-expressions.info – 2011-06-03 17:54:15
是的,我知道正則表達式可以幫助,但我也必須創建語法tree.i必須拆分語句並優先考慮像那樣的一些運算符「 |」我不知道我是否必須使用堆棧? – 2011-06-03 18:21:17