我知道這是可能的參數傳遞到詞法分析器:我可以將參數傳遞給我的fsyacc分析器嗎?
rule tokenize scope = parse
| whitespace { tokenize scope lexbuf }
| newline { newline lexbuf; tokenize scope lexbuf }
,但我不能確定以類似的方式我解析器開始符號。
我試圖把它定義是這樣的:(感謝this問題)
%type < (IScope, AST.Script) Fun > Script
// with the following definition in the head section of the parser:
type ('a,'b) Fun = 'a -> 'b
但後來我不得不這樣定義每一個非終端符號和他們都回lambda表達式。這不是我想要雖然實現的,我希望能夠幾個非終端中訪問scope
參數和分析過程中執行他們的行動。
我注意到IParseState類型中有ParserLocalStore
類型,其中只包含LexBuffer
(只能通過調試進行檢查)。由於我在每一個非終端通過parseState
訪問它,我也許能在那裏儲存參數,或者說是一個壞主意?
我想到了在解析器頭部分採用可變的變量,但他們是靜態的(我想?),而且會阻止我同時分析多個輸入...
編輯:
目前我儲存在特定的令牌scope
參數:
%token <string * IScope> IDENT
我通過scope
的詞法,誰其嵌入相關令牌w ^如果他創造了它們......我真的不喜歡這個解決方案,但是我還是無法想出更好的東西。
不是一個答案,但你有沒有考慮FParsec?參數傳遞很容易。 – Daniel
目前不在。我們有另一個解析器項目,可能會在那裏使用ANTLR。如果我們(在某個時候)也決定使用ANTLR來處理當前的項目,那麼我可以更輕鬆地使用fsyacc進行移植。隨着解析器組合(據我所知至少)我沒有一個很清晰的語法和所要做的一切相當不同,而大部分一fsyacc/ANTLR解析器的結構似乎是相似的。 – enzi