首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于解析开始和结束标签的Nearley语法

用于解析开始和结束标签的Nearley语法
EN

Stack Overflow用户
提问于 2021-04-21 13:18:54
回答 1查看 69关注 0票数 0

假设我有一种简单的语言可以在nearley中解析,它只是由字符串组成。"this is a string"

代码语言:javascript
复制
string -> "\"" chars "\""

但是,该字符串可以在大括号内包含代码。为了简单起见,让我们只说code只能是另一个字符串。"this is a string with {"code"}"

代码语言:javascript
复制
code -> "{" string "}"

如何在Nearley中定义新字符串以包含code定义?我总是得到大量的结果,因为chars可以匹配一个或多个字符。

代码语言:javascript
复制
string -> "\"" charCode "\""

charCode -> (chars | code) charCode
| (chars | code)

code -> "{" string "}"

chars -> char chars
| char
char -> [^{}]

理想情况下,我可以将类似这样的"chars {"code"} chars chars {"code"} chars"转换为数组["chars ", "code", " chars chars ", "code", " chars"]

也许只能使用此答案中建议的regex和moo来完成此操作?(在本例中,开始标记和结束标记比较明确,我没有遇到同样的问题。) [Nearley]: how to parse matching opening and closing tag

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 14:52:38

当然,我会使用基于regex的lexer。但是您可以尝试编写一种明确的语法,基于这样的观察:在一个chars中永远不能有两个相邻的charCode

代码语言:javascript
复制
string -> "\"" charCodeStart chars:? "\""
charCodeStart -> 
               | charCodeStart chars:? code

另一种可能性是使用EBNF:

代码语言:javascript
复制
string -> "\"" ( char:* code ):* char:* "\""

您可能需要尝试一下才能正确地使用它。我不怎么用nearley。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67189678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档