[英]How to parse a recursive left syntax rule with FParsec?
我通常將 FParsec 用於 LL 語法,但有時會發生在整個語法中只有一個元素需要左遞歸解析(因此語法不再是 LL)。 目前我有這樣的情況,我有一個用 FParsec 實現的大型 LL 語法,但是一個小的語法元素困擾着我,因為它顯然無法正確解析。 有問題的語法元素是訪問數組索引à la F#,例 ...
[英]How to parse a recursive left syntax rule with FParsec?
我通常將 FParsec 用於 LL 語法,但有時會發生在整個語法中只有一個元素需要左遞歸解析(因此語法不再是 LL)。 目前我有這樣的情況,我有一個用 FParsec 實現的大型 LL 語法,但是一個小的語法元素困擾着我,因為它顯然無法正確解析。 有問題的語法元素是訪問數組索引à la F#,例 ...
[英]With FParsec is it possible to manipulate the error position when a parser fails?
作為示例,我將以 Phillip Trelford 的這個簡單的 C# 解析器為例。 為了解析一個標識符,他寫了這個(略有改動): pidentifier 的問題在於,當它失敗時,position 指標位於 stream 的末尾。我的一個例子: 顯然,不是 C# 片段,但為了示例的緣故,我使用了 ...
[英]How to parse recusrive grammar in FParsec
我無法使用以前的問題來讓它工作 FParsec 中的遞歸文法似乎是在將createParserForwardedToRef添加到 FParsec 之前提出的一個老問題 AST 似乎不像我的那樣可怕的遞歸。 解析為遞歸數據結構語法依賴於特殊字符'['來指示另一個嵌套級別。 我沒有這種奢侈我想為我最近 ...
[英]fparsec - limit number of characters that a parser is applied to
我有一個問題,在解析 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 期間,我需要通過多次(按順序)應用特定解析器來解析下一個 N 個字符。 (拆掉的玩具)示例: 假設 17 表示接下來的 N=17 個字符組成標簽,所以我需要重復應用我的“tagParser”,但在 17 ...
[英]How to parse a fixed string with FParsec
我正在嘗試使用 FParsec 解析固定字符串。 例如從文檔中解析null : open FParsec type Json = JNull let jnull : Parser<_> = stringReturn "null" JNull 然后在"null"上運行jnull給出 ...
[英]FParsec match string which have one of 2 patterns
我正在嘗試學習 FParsec 並嘗試匹配遵循兩種模式的字符串。 該字符串可以是像"string"這樣的普通字符串,也可以是帶有一個點的字符串,如"st.ring" 。 解析器應如下所示: Parser<(string Option * string),unit> 。 第一個字符串是可 ...
[英]FParsec failing at the end of a spaces separated list, expecting another element of the list
我正在嘗試使用 FParsec 來解析形式為[string]的零個或多個元素的列表,其中中間的字符串可以是任何內容(除了]以消除字符串末尾的歧義)。 這是我的代碼: 這里的輸出是: 就好像解析器期待另一組括號,而不是在sepBy 2 次時終止。 我通過將spaces更改為(skipChar ...
[英]Using FParsec to parse possibly malformed input
我正在為特定文件格式編寫解析器,使用 FParsec 作為學習 fsharp 的第一步。 部分文件具有以下格式 其中括號中的數字是成對的值,並且可以有任意數量的空格來分隔它們。 因此,這些也是要解析的有效內容: 當然括號的內容可能是空的,即{} 此外,我希望解析器能夠處理內容格式有點錯誤的情況,例如 ...
[英]Create a sepBy parser combinator sensitive to the indentation of the first parser
通過 FParsec 並使用這個庫(其代碼很短,已復制到問題的末尾),我正在嘗試設計一個sepBy的解析器,它對傳入參數的第一個解析器的縮進很敏感. 通常,如果我給出這個: indentedSepBy (pstring "Example") (pchar '.') ,我希望這種類型的程序是可以接受的 ...
[英]F# how to define "recursive" variables
我正在使用 FParsec 庫為偽語言編寫一個解析器,我有一個語句解析器,它是在所有可能的語句之間選擇一個塊解析器,它解析一系列語句,直到一個“結束”關鍵字,現在我想編寫一個“循環”結構,問題是,循環本身是一個語句,並且包含一個塊,這導致了一個遞歸形式的定義,F# 不喜歡我剛才在 C# 中編寫了一個 ...
[英]Why are these two FParsec snippets different?
我想解析給定的char兩次,但只返回一次該字符的string 。 例如: 我有一些有效的代碼,但也有一些無效的代碼,我不明白為什么。 為什么這些片段不同?// Works let parseEscapedQuote (c : char) = let q = string c pstrin ...
[英]FParsec ‘many’ primitive fails when stream.UserState updated
以下例程是官方文檔“Tracing a parser” “解析器跟蹤包裝器”的一個小而簡化的更改。 此包裝器允許在解析器執行時檢查reply並根據需要更新stream.UserState 。 注意:此代碼只是將stream.UserState復制到自身上,實際上什么都不做,因為這是以下錯誤的最小操作 ...
[英]Getting FParsec to reject unmatched start end tags?
編寫我自己的 XML 解析器來學習 FParsec 我需要測試 XML 開始和結束標記是否匹配或解析器失敗。 在下面的代碼片段中...... 解析器xStartTag和xKey返回我想要匹配的string s。 解析器xContent_UntilCloseTag只返回標簽之間的任何內容。 ws跳 ...
[英]FParsec Not Recognizing a Type’s Constructor
以下頂級 XML 解析器定義返回錯誤The value or constructor 'TOP_LEVEL_RECORD' is not defined. … TOP_LEVEL_RECORD被定義為…… 解析器xDeclaration 、 xCommentor_Cdata和xElement都已 ...
[英]Matching More than One ParserResult and Extracting Values
這是一個關於使用 FParsec 的 ParserResult 的問題。 是否有一個更簡潔的match_result實現來提取 ParserResult 中包含的XKEYVALUE或XATTRIBUTES ParserResult沒有兩個嵌套匹配? 以下代碼用作 F# 控制台應用程序... 但是ma ...
[英]F# list of discriminated union sub-types
我想向用戶展示“FParsec 解析器”和“測試數據”列表,他們可以從中交互式地 select 並查看解析器在提供的文本上運行的結果。 具體來說,我試圖在這種類型的記錄列表中收集我的解析器測試: 上面的xKeyValue拋出錯誤... 我希望用戶查看並選擇label字符串並查看運行解析器的結果。 我 ...
[英]FParsec and postfix modifiers to parsed items
作為我自己的練習,我正在使用 FParsec 編寫一個函數,該函數可以從(有限的)正則表達式形式的規范中生成隨機字符串。 例如 我有很多工作,但我在后綴術語的想法上遇到了麻煩(即解析器可能需要返回並修改輸出,而不僅僅是 Char 流中的位置)。 例如“a”與“a+” 這是我的域類型的簡化版本 ...
[英]F# - Accessing Reference Cells from Different Projects
我正在使用 FParsec 編寫遞歸解析器,因此我正在使用createParserForwardedToRef創建虛擬解析器和參考單元格,如下所示:let pstatement, pstatementref = createParserForwardedToRef<Statement, Uni ...
[英]Skip whitespace and comments with FParsec
我嘗試在解析編程語言時跳過任何空格或注釋。 我想跳過兩種類型的評論: 行注釋: ;; skip rest of line ;; skip rest of line 塊評論:( (; skip anything between;) 使用注釋和空格解析的示例代碼: 我嘗試了多種方法,但解析器總是在某處中 ...
[英]FParsec - how to escape a separator
我正在研究 EDI 文件解析器,並且在為“段終止符”實現轉義時遇到了相當大的困難。 對於任何有幸不使用 EDI 的人來說,段終止符(通常是撇號)是段之間的分隔符,就像單元格一樣。 所需的行為如下所示: 使用 FParsec,沒有 escaping 撇號(並且,為簡單起見,忽略參數化),解析器看起來像 ...