标签: happy

取消某些Haskell Alex/Happy编译消息

在使用Alex lexer生成器或Happy解析器生成器创建一个Lexer.x或一个Parser.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 )
Run Code Online (Sandbox Code Playgroud)

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

{-# LINE 1 "<command-line>" #-}
Run Code Online (Sandbox Code Playgroud)

为什么包含这些行,并且有一种方法可以抑制这些消息,以防命令行显然没有用于生成的词法分析器和解析器中的任何内容?

haskell parser-generator alex happy

8
推荐指数
1
解决办法
580
查看次数

快乐:制作顺序消除了R/R冲突

我有一个语法,根据作品的顺序,快乐的报告3减少/减少冲突或没有.我能找到的最小例子是:

%tokentype {Token}
%token
    int     { Int }
    '-'     { Neg }
    both    { Both }
%nonassoc both
%left '-'
%nonassoc NEG
%%
E : int                  {IntE}
  | both E E             {BothE $2 $3}
  | '-' E %prec NEG      {NegE $2}
  | E '-' E              {SubE $1 $3}
{
data Token = Int | Neg | Both deriving Show
data Expr = BothE Expr Expr | IntE | SubE Expr Expr | NegE Expr deriving Show
}
Run Code Online (Sandbox Code Playgroud)

这有3个减少 - 减少冲突,基于无法区分" …

haskell reduce-reduce-conflict happy lr-grammar

8
推荐指数
0
解决办法
69
查看次数

JS:数字和空格的正则表达式?

我正在使用happyJS并使用下面的正则表达式进行电话验证

phone: function (val) {
        return /^(?:[0-9]+$)/.test(val);
    }
Run Code Online (Sandbox Code Playgroud)

然而,这仅允许数字.我希望用户能够输入空格

238 238 45383
Run Code Online (Sandbox Code Playgroud)

知道为什么return /^(?:[0-9 ]+$)/.test(val);不做这个伎俩?

javascript regex validation happy zepto

7
推荐指数
2
解决办法
2万
查看次数

快乐的上下文依赖运算符优先级

我在这里有两个Happy代码片段,一个使用普通优先级规则,另一个使用依赖于上下文的优先级规则(这两个都在这里描述).

正常:

%left '+'
%left '*'
%%

Exp :: { Exp }
    : Exp '+' Exp { Plus $1 $3 }
    | Exp '*' Exp { Times $1 $3 }
    | var         { Var $1 }
Run Code Online (Sandbox Code Playgroud)

上下文相关的:

%left PLUS
%left TIMES
%%

Exp :: { Exp }
    : Exp '+' Exp %prec PLUS  { Plus $1 $3 }
    | Exp '*' Exp %prec TIMES { Times $1 $3 }
    | var                     { Var $1 }
Run Code Online (Sandbox Code Playgroud)

鉴于输入:

a * …
Run Code Online (Sandbox Code Playgroud)

parsing haskell happy

6
推荐指数
1
解决办法
293
查看次数

语法含糊不清:为什么?(问题是:"(a)"vs"(az)")

所以我试图为单行语句实现一个非常简单的语法:

# Grammar

   c         : Character c        [a-z0-9-]
  (v)        : Vowel              (= [a,e,u,i,o])
  (c)        : Consonant
  (?)        : Any character (incl. number)
  (l)        : Any alpha char     (= [a-z])
  (n)        : Any integer        (= [0-9])
  (c1-c2)    : Range from char c1 to char c2
  (c1,c2,c3) : List including chars c1, c2 and c3

  Examples:
  h(v)(c)no(l)(l)jj-k(n)
  h(v)(c)no(l)(l)(a)(a)(n)
  h(e-g)allo
  h(e,f,g)allo
  h(x,y,z)uul
  h(x,y,z)(x,y,z)(x,y,z)(x,y,z)uul
Run Code Online (Sandbox Code Playgroud)

我正在使用Happy parser生成器(http://www.haskell.org/happy/),但由于某种原因,似乎存在一些歧义问题.

错误消息是:"shift/reduce conflicts:1"

我认为模棱两可是这两行:

  | lBracket char rBracket              { (\c -> case c of
                                                 'v' -> TVowel
                                                 'c' -> …
Run Code Online (Sandbox Code Playgroud)

grammar parsing haskell happy

5
推荐指数
1
解决办法
307
查看次数

快乐的%%是多少?

我正在使用Happy构建解析器,并注意到这是在线文档:

和yacc一样,我们在这里包含%%,没有任何正当理由.

%%

必须有一个理由,即使它是微不足道的.有谁知道它是什么?

haskell parser-generator happy

5
推荐指数
1
解决办法
147
查看次数

如何从Haskell中的语法规范构建抽象语法树?

我正在开发一个项目,该项目涉及在一小部分Java中优化某些构造,在BNF中形式化.

如果我在Java中这样做,我会使用JTB和JavaCC的组合来构建AST.然后访客用于操纵树.但是,考虑到在Haskell中解析庞大的库(parsec,happy,alex等),我在选择合适的库时有点困惑.

那么,简单地说,当在BNF中指定一种语言时,哪个库提供了构建AST的最简单方法?在惯用的Haskell中修改这棵树的最佳方法是什么?

haskell parsec abstract-syntax-tree zipper happy

5
推荐指数
2
解决办法
2182
查看次数

"cabal安装快乐"导致内存溢出.(GHC 7.8.2)

我一直试图让快乐正确安装,在过去几天,虽然我发现它具有挑战性的获得cabal install happy不只是错误(通过安装happy-1.19apt-get并添加/opt/happy/1.19.3/binPATH),现在它通过源运行,直到它到达ProduceCode(15/18)并且似乎进入无限循环.Ctrl+C当整个系统无响应时,它会累积内存,直到我点击或关闭电源.

我想我记得这根本不是GHC-HEAD的问题,但我不想使用头部,因为它似乎每隔几天更新一次,要求我不断重建我的包裹,除非有一个技巧我不要不知道从哪里迁移headhead+1.

$ ghc -v
Glasgow Haskell Compiler, Version 7.8.2, stage 2 booted by GHC version 7.4.1
Using binary package database: /opt/ghc/7.8.2/lib/ghc-7.8.2/package.conf.d/package.cache
Using binary package database: /home/house/.ghc/x86_64-linux-7.8.2/package.conf.d/package.cache
package oeis-0.3.5-26e4c8a4e89d20dbd9e2d89ad4774bd0 is unusable due to missing or recursive dependencies:
HTTP-4000.2.12-2793df5d0fb675f1a42bc04cfdf74851
hiding package Cabal-1.18.1.3 to avoid conflict with later version Cabal-1.20.0
hiding package Cabal-1.19.2 to avoid conflict with later version Cabal-1.20.0
wired-in package …
Run Code Online (Sandbox Code Playgroud)

haskell ghc cabal happy oeis

5
推荐指数
1
解决办法
264
查看次数

GHC 无法推断未提升的类型

我遇到了由 Happy 生成的看似无效的代码。问题归结为 GHC 没有推断函数的多类类型签名。下面是一个例子:

\n\n
{-# Language MagicHash #-}\n\nf x = ()\n\nmain = pure (f 1#)\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于 GHC 正在推断f :: a -> ()哪里a :: *,所以失败了

\n\n
 \xe2\x80\xa2 Couldn't match a lifted type with an unlifted type\n   When matching the kind of \xe2\x80\x98GHC.Prim.Int#\xe2\x80\x99\n \xe2\x80\xa2 In the first argument of \xe2\x80\x98f\xe2\x80\x99, namely \xe2\x80\x981#\xe2\x80\x99\n   In the first argument of \xe2\x80\x98pure\xe2\x80\x99, namely \xe2\x80\x98(f 1#)\xe2\x80\x99\n   In the expression: pure (f 1#)\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否有任何语言编译指示我可以打开来编译此代码?我知道理论上我可以只添加类型签名,但是,由于这是由 Happy 生成的代码,我不希望手动修改任何内容。

\n

haskell types happy polykinds

5
推荐指数
1
解决办法
303
查看次数

Haskell - 快乐的解析器错误

我正在开发一个使用Happy parser生成器的项目.这是我到目前为止所做的事情:

Exp   : Exp1                    { $1 }

Exp1  : Exp1 '+' Term           { \p -> $1 p + $3 p }
      | Exp1 '-' Term           { \p -> $1 p - $3 p }
      | Term                    { $1 }

Term  : Term '*' Factor         { \p -> $1 p * $3 p }
      | Term '/' Factor         { \p -> $1 p / $3 p }
      | sqrt Factor             { \p -> sqrt $2 p }
      | Factor                  { …
Run Code Online (Sandbox Code Playgroud)

parsing haskell happy

4
推荐指数
1
解决办法
642
查看次数