如何在Happy解析器中匹配正则表达式
How do I match a Regular Expression in a Happy parser?
我正在用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
这是相关的快乐代码:
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 }
您应该将regex定义为lexer识别的终端(即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 }
要回答评论中的问题,需要多一点空间。
类似(间隔开并评论):
/ forward slash
( ''. either: an escaped character
| [^'[/''] anything which isn't / or [ or '
| '[ a character class containing:
[^']]* anything which isn't ] any number of times
']
)* any number of times
/ forward slash
浓缩:
/(''.|[^'[/'']|'[[^']]*'])*/
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 如何在Happy解析器中匹配正则表达式