繁体   English   中英

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

[英]Nearley parser grammar for parsing opening and closing tags

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

string -> "\"" chars "\""

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

code -> "{" string "}"

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

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"]

也许只能按照这个答案中的建议使用正则表达式和 moo 来做到这一点? (在这个例子中,开始和结束标签不那么模棱两可了,我没有遇到同样的问题。) [Nearley]:如何解析匹配的开始和结束标签

当然,我会使用基于正则表达式的词法分析器。 但是您可以尝试编写一个明确的语法,基于观察到您永远不能在charCode中有两个相邻的chars

string -> "\"" charCodeStart chars:? "\""
charCodeStart -> 
               | charCodeStart chars:? code

另一种可能性,使用 EBNF:

string -> "\"" ( char:* code ):* char:* "\""

你可能不得不玩一点才能让它正确。 我不怎么用nearley。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM