问题标签 [alex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
82 浏览

haskell - Cabal 构建产生错误 - 手动代码似乎很好?

在我的整个开发过程中,我一直在手动运行 alex/happy 来生成我的解析器文件,然后运行 ​​ghci 来测试代码。这可以正常工作并将我加载到 GHCI 中,但是每当我运行程序时,我的文件cabal repl中都会抛出一个错误。Parser.hs

该错误是一个类型错误:Couldn't match type '[a]' with 'Expression'但是每当我手动测试此代码时ghci main,代码运行正常吗?

我不确定我是否没有完全理解 cabal 的工作原理,但我注意到从 happy 和 cabal 生成的 haskell 解析器是完全不同的。

我在下面附上了 cabal build 命令的错误消息的开头。

编辑

因此,正如 Alec 所指出的,每当运行 cabal 构建时,它都会对-agc标志感到满意,我不知道这一点,因此我的代码需要调整。

解决方案是使用标志构建 Happy 解析器-agc并确保它以这种方式编译。这可能会导致解析器中出现一些新错误,因为生成的解析器略有不同,但根据我的研究,如果没有cabal repl上述标志,就无法愉快地运行。

0 投票
1 回答
877 浏览

regex - 段落的正则表达式匹配

我无法弄清楚用于解析文本文件和识别段落的正确正则表达式。

我目前拥有的:

示例文本:

Das Pensionat Klinger war bereits etwas zusammengeschmolzen, als das junge Ehepaar daselbst eintrat。Es war ein unfreundlicher, regnerischer Sommer gewesen。Klagen überall ... aus der Schweiz -- vom Salzkammergut her, wo der berüchtigte »Schnürlregen« tagaus tagein herabgoß -- Klagen vom Ostseestrande und aus dem Engadin ... Klagen endlich auch aus dem lieblichen Gebirgsnest in Süd-Bayern, in welchem man durch schönes Wetter sonst arg verwöhnt 战争。

Ein so reizendes Stück Erde!Tief gelegen -- hoch gelegen, wie man's eben nehmen wollte, denn die zierlichen, wie aus der Spielzeugschachtel genommenen Häuschen kletterten hier waghalsig die Berge empor, versteckten sich dorteigenwillig unter breitästigen Obstbäumen tief drunten im Thal。Aber die Sonne fand sie alle und übergoß sie mit breiten Strahlenfluten hellen Goldes, und der Bergwind, wie er frisch und kühl vom Gebirge herunterfuhr, strich darüber hin -- und ringsumher griffen die Berge wie die Glieder einer gewaltigen Kette ineinander ... einige grün , dicht bewaldet, die anderen kahl und schroff, hoch oben nur mit kümmerlichem Fichtenwuchs bestanden, und etwelche unter ihnen stolz zu den Wolken aufragend, ewigen Schnee auf dem Haupt, und in den Falten des Obergewandes blauschimmerndes Gletschereis!

我不断收到反馈,在行尾我收到了一个令牌,说 TokenParagraph。

例如:

....还有一个[这是它错过步骤的地方]

编辑:

尝试的时候(\n|^).*?(?=\n|$)

我明白了,

为 lexing-0.1.0.0 预处理可执行文件“Main”.. Tokens.x:22:8: 解析错误

0 投票
0 回答
62 浏览

haskell - Alex monad wrapper 之间的区别;并跳过

在 alex 中使用 monadwrapper,您似乎可以跳过使用其中一个;{skip}操作。它们生成不同的代码,但我似乎找不到区别。为什么文档中没有解决这个明显的问题?

0 投票
1 回答
587 浏览

haskell - Happy生成的Haskell源有错误“输入'数据'上的解析错误”

我正在尝试 Haskell 的快乐解析器生成器。在happy.hs中生成模块后(生成时没问题!),我运行命令ghc happy.hs,我得到错误:Line 297: parse error on input 'data'. 有没有人有解决方案?或者告诉我在哪里可以得到解决方案?

我尝试在 GHCi 中加载模块,而不是使用 ghc 编译它。但它似乎也不起作用 - 我得到了同样的错误。

happy.y 中的代码(快乐源代码):

在happy.hs 和±10 行中出错的行(第287~307 行,包括):

我希望程序能够顺利运行而不会出现任何错误,但事实并非如此。

0 投票
1 回答
53 浏览

haskell - Alex 要求结果令牌类型是采用 AlexPosn 的某个函数

我正在尝试编写一个词法分析器,它可以对 c 样式的注释进行词法分析,而不是其他任何东西(现在)。

代码生成成功,但编译失败,出现以下错误:

编译器抱怨令牌类型(包含在 中Alex)必须采用 type 的参数AlexPosn。我很困惑,因为用户指南中已经有一个AlexPosnAlexInput并且用户指南明确指出,只要它们在所有令牌中保持相同,令牌类型就可以做任何事情。

将定义更改为tok以下解决了该问题:

但我不知道为什么亚历克斯要让令牌采取AlexPosn

0 投票
2 回答
312 浏览

parsing - 在 Haskell 中使用 Alex 制作解析骰子卷的词法分析器

我正在使用 Alex + Happy 为 Haskell 中的 DSL 制作解析器。我的 DSL 使用掷骰子作为可能表达式的一部分。

有时我有一个要解析的表达式,如下所示:

这应该大致翻译为:

我的 DSL 也使用变量(基本上是字符串),所以我有一个特殊的标记来处理变量名。所以,有了这个令牌:

我现在使用解析时得到的结果是:

这意味着我的词法分析器“读取”了一个整数和一个名为“D6”的变量。

我尝试了很多东西,例如,我将令牌D更改为:

但这只是消耗数字:(

  • 我可以用数字解析骰子吗?
  • 或者至少解析TokenInt-TokenD-TokenInt?

PS:我使用 PosN 作为包装器,不确定是否相关。

0 投票
1 回答
416 浏览

haskell - Cabal 在使用 alex 构建时尝试构建未知包,在 nix-shell 中很开心

我目前正在尝试使用 nix-shell 和 cabal 构建一个 Haskell 项目,并使用 alex 和 happy 作为构建工具。在nix-shell内部构建(有和没有--pure),我收到以下奇怪的错误消息:

aoc:happy:exe.happy尽管在 cabal 文件中没有提到这样的事情,但它似乎试图满足一些无意义的依赖。在 nix-shell 中,我可以直接作为可执行文件运行alexhappy因为它们是由 nix 提供的。

问题:有谁知道我可以尝试解决这个问题吗?我想尝试完全使用 nix 提供依赖项,而不是使用cabal update从 Hackage 下载包。


可以在unhappy此处的分支中找到源代码,其中包含感兴趣的文件:


到目前为止我尝试过的一些事情是:

  • 我在这里发现了一个类似的错误,但它没有完全解决,并且那里的 nix 构建使用了 haskell.nix

  • 在进行故障排除时,我尝试了以下其他构建方法:

    1. 使用通过ghcup安装的 cabal/ghc构建(cabal 3.2.0.0,ghc 8.10.2):构建成功 - 从 Hackage 获取 alex 和 happy 并以build-tools.

    2. 使用nix-build 构建:构建成功运行(没有将包提取到 .cabal)。callCabal2nix认出了亚历克斯和快乐,并成功地将他们提供给阴谋集团。

    3. 在nix-shell中构建cabal update: 与 1. 相同,并且它成功,因为 nix 提供的 cabal 从 Hackage 获取包,但这不是我想要完成的。

  • 我还尝试使用 nix-shell 构建一个最小的示例 alex/happy 项目,使用我自己项目中相同的通用 *.nix 文件,并产生相同的错误。

0 投票
2 回答
35 浏览

regex - 如何检查正则表达式是否有偶数个字符,总共只有 2 个字符?

我希望能够使用仅包含 A 和 B 的文件,并且仅使用正则表达式能够仅允许具有偶数 A 且 B 为奇数或偶数的部分。A 可以被 B 分开,并且不必是 2 个一组。

这里有些例子:

0 投票
1 回答
101 浏览

haskell - 为什么这个词法分析器不解析这个输入?

我想使用以下代码示例:

这应该是

但是,我的 alex lexer 在第一行遇到错误时停止\(在 后面有和没有空格\)。

为什么会这样?词法分析器:

我认为这与我如何匹配\令牌有关。但是,我尝试过匹配它

'\' '\\' "\" "\\" \\ \还有一个正则表达式,但似乎没有任何效果。

\亚历克斯有什么奇怪的行为吗?还是我看不到的其他一些微不足道的错误?

更新

我现在尝试将其更改@identifier为:

以 alexy 方式进行“除了 x 之外的任何事情”匹配,但这并没有改变输出中的任何内容。

0 投票
1 回答
58 浏览

haskell - 当我在词法分析器中获得数字模式时,字节模式

我在词法分析器中有数字模式

我想为字节添加另一种模式。字节包含从 diaposon 0 - f 的 2 个符号。我应该为字节写哪种模式?它会正确区分 11 :: byte 和 11 :: num 吗?