javascript - 如何在 Happy 解析器中匹配正则表达式?

标签 javascript parsing haskell parser-generator happy

我正在用 Happy 编写一个 JavaScript 解析器我需要匹配一个正则表达式。我不想完全解析正则表达式,只是将其存储为字符串。

我的 AST 的相关部分如下所示:

data PrimaryExpr
    -- | Literal integer
    = ExpLitInt     Integer
    -- | Literal strings
    | ExpLitStr     String
    -- | Identifier
    | ExpId         String
    -- | Bracketed expression
    | ExpBrackExp   Expression
    -- | This (current object)
    | ExpThis
    -- | Regular Expression
    | ExpRegex      String
    -- | Arrays
    | ExpArray      ArrayLit
    -- | Objects
    | ExpObject     [(PropName, Assignment)]
    deriving Show

这是相关的 Happy 代码:

primaryExpr :: { PrimaryExpr }
    : LITINT          { ExpLitInt $1 }
    | LITSTR          { ExpLitStr $1 }
    | ID              { ExpId $1 }
    | THIS            { ExpThis }
    | regex           { ExpRegex $1 }
    | arrayLit        { ExpArray $1 }
    | objectLit       { ExpObject $1 }
    | '(' expression ')' { ExpBrackExp $2 }

我的问题是,我应该如何定义我的 regex 非终端?这样的结构对吗?

regex :: { String }
    : '/' whatHere? '/' { $2 }

最佳答案

您应该将正则表达式定义为词法分析器(即 LITREGEX)可识别的终端。

primaryExpr :: { PrimaryExpr }
    : LITINT          { ExpLitInt $1 }
    | LITSTR          { ExpLitStr $1 }
    | LITREGEX        { ExpRegex $1 }
    | ID              { ExpId $1 }
    | THIS            { ExpThis }
    | arrayLit        { ExpArray $1 }
    | objectLit       { ExpObject $1 }
    | '(' expression ')' { ExpBrackExp $2 }

关于javascript - 如何在 Happy 解析器中匹配正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270766/

相关文章:

javascript - JS 数组中所有项相乘

parsing - 轻松将 Key=Value 对的字符串解析为 Scala 案例类

haskell - 越界 `select` 即使我 `constrain` 索引

haskell - 如果字符串仅包含数字则返回 true 的程序

haskell - 返回一个函数

javascript - 解析模板字符串

javascript - 来自 python 列表的数据列表

javascript - jQuery/CSS - 单击 iframe 内容内的按钮时更改 IFRAME 高度

javascript - 解析 Json 的最佳方法?

java - 解析任务列表