讓我們假設我有一個簡單的JavaCC語法解析加法和減法:的JavaCC:我怎樣才能維持原來的文本(包括空格)
....
void CompilationUnit() :
{}
{
(Expression())+
EOF
}
void Expression() :
{}
{
Number()
(
Addition()
| Subtraction()
)*
}
void Number() :
{}
{
}
void Addition() :
{}
{
Number()
}
void Subtraction() :
{}
{
Number()
}
我有使用該語法產生的AST類以計算結果:
public class Calculator extends DepthFirstVisitor {
int result = -1;
public void visit(Expression n) {
if (result >= 0) System.out.println(toText(n) + " = " + result);
result = 0;
super.visit(n);
}
public void visit(Number n) {
...
}
public void visit(Addition n) {
...
}
....
}
我能夠計算表達式的值,但我也需要原始表達式(因爲它出現了)。所以以下輸入:
5 + 2 - 1 2 + 1
我想有以下輸出:
5 + 2 - 1 = 6 2 + 1 = 3
不幸的是,因爲我喜歡跳過空格或換行符角色,這是我得到的是:
5+2-1 = 6 2+1 = 3
有沒有什麼方法可以輸出原始文本(包括跳過的字符)?
請注意實際問題要大得多,語法要複雜得多。所以我沒有真正尋找特定於上述問題的解決方案(例如,預處理行並將它們拆分爲換行符或修改方法以在每個令牌後面「手動」添加空格),但更像是使用某些JavaCC功能的解決方案。
是的JavaCC有特殊的標記。請參閱http://www.engr.mun.ca/~theo/JavaCC-FAQ/常見問題中的Q 5.2。 – 2013-05-01 23:22:23