我正在尝试使用Irony创建一个相当简单的解析器,但我得出的结论是 Irony 可能不适合这种特殊情况。
这些是我要解析的示例:
server_name example.com *.example.com www.example.*;
server_name www.example.com ~^www\d+\.example\.com$;
server_name ~^(?<subdomain>.+?)\.(?<domain>.+)$;
我正在使用带有空格或分号的 FreeTextLiterals 作为终止符
var serverNamevalue = new FreeTextLiteral("serverNameValue", FreeTextOptions.None, " ", ";");
然后我使用 MakePlusRule 来获取一个或多个 server_name 值:
httpCoreServerName.Rule = "server_name" + httpCoreServerNameItems + semicolon;
httpCoreServerNameItems.Rule = MakePlusRule(httpCoreServerNameItems, serverNamevalue);
但是 - 我认为在这种情况下将空格作为 FreeTextLiteral 的终止符存在问题。当我运行它时,我得到一个解析器错误。如果我将空格替换为另一个特定字符以充当终止符(并在对 MakePlusRule 的调用中添加此分隔符) - 它可以正常工作。
有人对我如何在 Irony 中处理这个问题有任何想法吗?