"templates/wrappers.hs"住在什么地方,在Happy项目中吗?
Where does "templates/wrappers.hs" live, in a Happy project?
我正在尝试使用 Alex with Happy 制作解析器。我正在按照 this post 的说明进行操作,但遇到了问题。我正在尝试追踪以下类型错误的来源:
templates/wrappers.hs:234:9:
Couldn't match type ‘Token’ with ‘Int -> Alex Token’
Expected type: AlexInput -> Int -> Alex Token
Actual type: String -> Token
In a stmt of a 'do' block: action (ignorePendingBytes inp) len
In the expression:
do { alexSetInput inp';
action (ignorePendingBytes inp) len }
In a case alternative:
AlexToken inp' len action
-> do { alexSetInput inp';
action (ignorePendingBytes inp) len }
我的词法分析器在 src/AnsiParser/FrontEnd/Lex.x。所以我看了一下dist/build/AnsiParser/FrontEnd/Lex.hs,我能找到的是:
{-# LINE 1 "templates/wrappers.hs" #-}
{-# LINE 1 "templates/wrappers.hs" #-}
但是我在我的系统上找不到任何名为 "wrapper.hs" 的文件。我怎样才能找到这个错误的原因?
如果它有用,这里是我的 Parse.y:
的简化版本
{
module AnsiParser.FrontEnd.Parse where
import AnsiParser.FrontEnd.Lex
}
%name parseTokens
%tokentype { Token }
%lexer { lexWrap } { alexEOF }
%monad { Alex }
%error { parseError }
%token
-- tokens
%%
-- rules
{
parseError :: Token -> Alex a
parseError tokens = error ("Error!" ++ show tokens)
}
和Lex.x:
{
module AnsiParser.FrontEnd.Lex where
}
%wrapper "monad"
tokens :-
-- tokens
{
data Token
= -- token types
| TokenEOF
deriving (Show)
scanTokens = alexMonadScan
lexWrap :: (Token -> Alex a) -> Alex a
lexWrap = (alexMonadScan >>=)
alexEOF :: Alex Token
alexEOF = return TokenEOF
}
您可以在 alex 存储库中找到 template/wrappers.hs
的来源:
https://github.com/simonmar/alex/tree/master/templates
运行 alex 在你提供的 Lex.x
上给了我这个错误:
alex: (Array.!): undefined array element
如果你给我一个工作示例,我可以找出你的问题。
我正在尝试使用 Alex with Happy 制作解析器。我正在按照 this post 的说明进行操作,但遇到了问题。我正在尝试追踪以下类型错误的来源:
templates/wrappers.hs:234:9:
Couldn't match type ‘Token’ with ‘Int -> Alex Token’
Expected type: AlexInput -> Int -> Alex Token
Actual type: String -> Token
In a stmt of a 'do' block: action (ignorePendingBytes inp) len
In the expression:
do { alexSetInput inp';
action (ignorePendingBytes inp) len }
In a case alternative:
AlexToken inp' len action
-> do { alexSetInput inp';
action (ignorePendingBytes inp) len }
我的词法分析器在 src/AnsiParser/FrontEnd/Lex.x。所以我看了一下dist/build/AnsiParser/FrontEnd/Lex.hs,我能找到的是:
{-# LINE 1 "templates/wrappers.hs" #-}
{-# LINE 1 "templates/wrappers.hs" #-}
但是我在我的系统上找不到任何名为 "wrapper.hs" 的文件。我怎样才能找到这个错误的原因?
如果它有用,这里是我的 Parse.y:
的简化版本{
module AnsiParser.FrontEnd.Parse where
import AnsiParser.FrontEnd.Lex
}
%name parseTokens
%tokentype { Token }
%lexer { lexWrap } { alexEOF }
%monad { Alex }
%error { parseError }
%token
-- tokens
%%
-- rules
{
parseError :: Token -> Alex a
parseError tokens = error ("Error!" ++ show tokens)
}
和Lex.x:
{
module AnsiParser.FrontEnd.Lex where
}
%wrapper "monad"
tokens :-
-- tokens
{
data Token
= -- token types
| TokenEOF
deriving (Show)
scanTokens = alexMonadScan
lexWrap :: (Token -> Alex a) -> Alex a
lexWrap = (alexMonadScan >>=)
alexEOF :: Alex Token
alexEOF = return TokenEOF
}
您可以在 alex 存储库中找到 template/wrappers.hs
的来源:
https://github.com/simonmar/alex/tree/master/templates
运行 alex 在你提供的 Lex.x
上给了我这个错误:
alex: (Array.!): undefined array element
如果你给我一个工作示例,我可以找出你的问题。