Apex
言語の字句解析パーサを Apex 言語で書いてみた
Apex
言語の字句解析パーサを Apex
言語で書いてみて、GitHub に公開してみました。RsvrApexParser
と名づけました。
※これは趣味の活動です。
GitHub
- RsvrApexParser
- https://github.com/igapyon/RsvrApexParser
- Apex Parser written in Apex language.
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 の構文は規模が大きめで ちょっと手が出ませんでした。