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 を使用して、1 つ以上の server_name 値を取得しています。
httpCoreServerName.Rule = "server_name" + httpCoreServerNameItems + semicolon;
httpCoreServerNameItems.Rule = MakePlusRule(httpCoreServerNameItems, serverNamevalue);
ただし、この場合、FreeTextLiteral のターミネータとして空白を使用することに問題があると思います。これを実行すると、パーサー エラーが発生します。空白をターミネータとして機能する別の特定の文字に置き換えると (また、これを MakePlusRule の呼び出しで区切り文字に追加すると)、正常に動作します。
Ironyでこれをどのように処理できるかについて、誰かアイデアがありますか?