我正在编码我的第一个解析器。它在F#里,我和FParsec一起用。我的解析器解析了一些东西,如true and false、(true and false or true)、true、(((true and false or true)))等,这是正确的。当文本中间有括号时,它会失败。let private infixOperator (opp: OperatorPrecedenceParser<_,_,_>) op prec map =
这个问题类似于,但我想使用FParsec中的OperatorPrecedenceParser解析一个带有函数应用程序的表达式。下面是我的AST: | Float of float | BinaryOperation of OperatorFloat) <|> (ident |>> Variable)
let parenexpr = between (str_ws "(&
根据StackOverflowException的说法,我用FParsec测试缩进,但是当我通过添加表达式(文字、列表、元组和算术操作)、允许表达式到顶层并添加变量创建语句使它变得更复杂时,我首先会得到一个FParsec错误。在我看来,这是因为表达式解析器的请求方式使得程序中有一个无限循环。我看不出其他的原因,然而,我不知道如何解决这个问题。: let myVar = 2 + 1这是我的代码:
open
\{%\s*end\1\s*%\}` 我发现很难用FParsec来表达上面的逻辑。我想写一些类似于between s t (everythingUntil t)的东西,但我不知道如何在不使用everythingUntil的情况下实现它,这会导致between失败。最后,我得到了以下内容,它不处理嵌套的"{%"事件,但似乎通过了我关心的主要测试用例:
let trimStr (s : str