0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SalesforceAdvent Calendar 2022

Day 12

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

Last updated at Posted at 2022-12-24

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 の構文は規模が大きめで ちょっと手が出ませんでした。

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?