0
大家早上好,Treetop解析器:如何處理空格?
我目前正在嘗試描述一些基本的Ruby語法,但我現在停留在解析空間? 我可以處理X = 1 + 1,
但不能解析器X = 1 + 1,
我怎麼能解析器空間?
我已經嘗試在每個終端後添加足夠的空間。 但它不能解析,給一個零..... 我該如何解決它? 非常感謝,祝你有個愉快的一天。
grammar Test
rule main
s assign
end
rule assign
name:[a-z]+ s '=' s expression s
{
def to_ast
Assign.new(name.text_value.to_sym, expression.to_ast)
end
}
end
rule expression
add
end
rule add
left:brackets s '+' s right:add s
{
def to_ast
Add.new(left.to_ast, right.to_ast)
end
}
/
minus
end
rule minus
left:brackets s '-' s right:minus s
{
def to_ast
Minus.new(left.to_ast, right.to_ast)
end
}
/
brackets
end
rule brackets
'(' s expression ')' s
{
def to_ast
expression.to_ast
end
}
/
term
end
rule term
number/variable
end
rule number
[0-9]+ s
{
def to_ast
Number.new(text_value.to_i)
end
}
end
rule variable
[a-z]+ s
{
def to_ast
Variable.new(text_value.to_sym)
end
}
end
rule newline
s "\n"+ s
end
rule s
[ \t]*
end
end
此代碼的工作 問題解決了!!!!
我已經在每個終端後添加足夠的空間,但它顯示無.......... T_T – DoubleMay
你還沒有做我說的。在每個規則的開始處,或者在調用像'expression'這樣以跳過空格結束的規則之後,你不需要'space',在開始時需要它的唯一規則是'main'。但是你仍然失敗,因爲你的''+''和類似的文字中有空格。刪除這些空格。你還必須在'true'和'false'之後直接放置'![a-z]';之後跳過空格。 – cliffordheath
神聖的耶穌,它的作品!!!!!!!!!非常感謝!!!!!!!!!!!!! – DoubleMay