gpt4 book ai didi

haskell - 禁止某些 Haskell Alex/Happy 编译消息

转载 作者:行者123 更新时间:2023-12-02 15:05:08 26 4
gpt4 key购买 nike

使用 Alex 词法分析器生成器或 Happy 解析器生成器创建 Lexer.xParser.y 解析器时,将它们编译到 Haskell 文件中,然后编译它们到目标文件中,默认情况下这将生成以下“警告”:

$ ghc Lexer
line-map.c: file "<command-line>" left but not entered
line-map.c: file "<command-line>" left but not entered
[1 of 1] Compiling Lexer ( Lexer.hs, Lexer.o )
$ happy Parser.y
$ ghc Parser
line-map.c: file "<command-line>" left but not entered
line-map.c: file "<command-line>" left but not entered
[2 of 2] Compiling Parser ( Parser.hs, Parser.o )

这些行是由于生成的 .hs 文件中嵌入了以下行而出现的:

{-# LINE 1 "<command-line>" #-}

为什么要包含这些行,如果命令行显然没有用于生成的词法分析器和解析器中的任何内容,是否有办法抑制这些消息?

最佳答案

谷歌搜索“左但未输入”表明类似这样的消息表明配置错误 gcc 。以下是 Apple 版本中生成消息的代码:

void
linemap_check_files_exited (struct line_maps *set)
{
struct line_map *map;
/* Depending upon whether we are handling preprocessed input or
not, this can be a user error or an ICE. */
for (map = &set->maps[set->used - 1]; ! MAIN_FILE_P (map);
map = INCLUDED_FROM (set, map))
fprintf (stderr, "line-map.c: file \"%s\" entered but not left\n",
map->to_file);
}

(来自 http://www.opensource.apple.com/source/gcc/gcc-5484/libcpp/line-map.c )

这里的“ICE”指的是“内部编译器错误”。

插入 #LINE 指令,以便 ghc 可以根据 .x 或 .y 文件中的位置报告错误。它表示以下行实际上是另一个文件中的某一行。伪文件名的 #LINE 指令 <command-line><built-in>可以被忽略,因为它们总是紧跟一个真实文件名的 #LINE 指令,例如:

...
{-# LINE 1 "<built-in>" #-}
{-# LINE 1 "<command-line>" #-}
{-# LINE 1 "templates/wrappers.hs" #-}
...
{-# LINE 1 "<built-in>" #-}
{-# LINE 1 "<command-line>" #-}
{-# LINE 1 "templates/GenericTemplate.hs" #-}
...

作为测试,您可以简单地删除 <command-line> 的 #LINE 指令。并查看警告是否消失。我还会尝试重新安装/升级您的 gcc 和/或 Haskell 平台。

关于haskell - 禁止某些 Haskell Alex/Happy 编译消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18060029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com