我在Visual Studio中使用fsyacc(使用Parsed Language Starter模板),但构建输出不显示发生错误的行/列(仅限: fsyacc退出代码1 )。我必须从命令提示符构建以获取此信息,这有点否定了VS集成的好处。
有没有办法在输出窗口中显示它?
以下是一些未在输出窗口中显示的错误示例。
Parser.fsy(74,4): error: parse error
和
building tables FSYACC: error FSY000: NonTerminal 'query' has no productions
这里的成功输出也很好看:
building tables computing first function...time: 00:00:00.1318603 building kernels...time: 00:00:00.1027372 building kernel table...time: 00:00:00.0533044 computing lookahead relations............................. ..............time: 00:00:00.0517415 building lookahead table...time: 00:00:00.0207993 building action table...state 29: shift/reduce error on AS state 49: shift/reduce error on OR state 49: shift/reduce error on AND ... time: 00:00:00.1457792 building goto table...time: 00:00:00.0035636 returning tables. 39 shift/reduce conflicts 62 states 11 nonterminals 41 terminals 46 productions #rows in action table: 62
答案 0 :(得分:3)
我没有使用Parsed Language Starter模板,而是使用来自VS Project Properties的Pre-build event
中的Build Events
来构建解析器/词法分析器:
fslex "$(ProjectDir)Lexer.fsl"
fsyacc --module Grammar "$(ProjectDir)Grammar.fsy"
由于我必须在Path环境变量中设置fsyacc / fslex,因此不太理想。每当我不想重建解析器/词法分析器时,我必须在fsproj文件中注释掉以下部分:
<PropertyGroup>
<PreBuildEvent>fslex "$(ProjectDir)Lexer.fsl"
fsyacc --module Grammar "$(ProjectDir)Grammar.fsy"
</PreBuildEvent>
</PropertyGroup>
然而,获胜点很明确。我们在stdout
中包含所有消息,包括错误和成功输出,便于调试。