LoginSignup
0

posted at

updated at

Apex 言語の字句解析パーサを Apex 言語で書いてみた

Apex 言語の字句解析パーサを Apex 言語で書いてみた

Apex 言語の字句解析パーサを Apex 言語で書いてみて、GitHub に公開してみました。RsvrApexParser と名づけました。
※これは趣味の活動です。

GitHub

Usage

RsvrApexParser に内包される RsvrApexLexicalParser というクラスを使うと字句解析できます。

List<ApexClass> apcList = [SELECT Name, Body, NamespacePrefix
                FROM ApexClass
                WHERE Status = 'Active'
                ORDER BY LastModifiedDate DESC
                LIMIT 1];

for (ApexClass apc : apcList) {
    String apexClassBody = RsvrApexLexicalParserUtil.readApexClassBody(apc.Name);
    RsvrApexLexicalParser parser = new RsvrApexLexicalParser();
    List<RsvrApexLexicalParser.LexicalToken> result = parser.parse(apexClassBody);
    // あとは字句解析結果をお好みに使います。
}

未実装

おおよその字句解析には対応させてみましたが、主に以下の箇所が未実装ではあります。

  • SOQL Currency literal
  • SOSL FIND seriese

感想

数年に一回は字句解析、構文解析を書き下ろしたくなるのですが、今ちょうど Salesforce Apex を扱っているので、それならば Apex で Apex を解析してみよう、というのがスタート地点です。
ただ、CPU の 10秒ルールがあって、書き下ろしには一部苦労が、、、。パフォーマンス改善をおこない、 10秒ルールには抵触しづらくはなっています。

ほんとうは構文解析も書き下ろしてみたいのですが、暇時間が確保できず、また Apex の構文は規模が大きめで ちょっと手が出ませんでした。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0