我目前使用happy
來解析語言,但我不認爲解析器是相關的,只是說它是一個LALR解析器。這裏是從語法的一小部分摘錄:使用括號和不同類型的表達式進行解析
ArithExpr -> ArithExpr + ArithExpr
ArithExpr -> (ArithExpr)
ArithExpr -> ...
BoolExpr -> ArithExpr == ArithExpr
BoolExpr -> (BoolExpr)
BoolExpr -> ...
問題是,我得到減少減少衝突。我想,當我試圖解析類似下面的問題出現了:
((2 + 3) == (4 + 5))
只有一種解析這個表達方式,但問題是,我認爲即使在解析器開始有一些麻煩,第一個括號。我認爲這種情況的原因是,該分析器不知道是否它面臨ArithExpr
或在未來BoolExpr
,並且因爲它是隻得到了超前的一個標記它使這可能是錯誤的任意選擇。
反正是有重寫語法接受這種語言?或者我應該真的只是來解析這兩個ArithExpr
和BoolExpr
就像一個統一的Expr
和類型檢查期間與實際類型處理?