`
JerryWang_SAP
  • 浏览: 1003722 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

ABAP开发环境语法高亮的那些事儿

阅读更多

关于SAP ABAP开发环境,Jerry之前写过几篇公众号文章:

  • 那些年我用过的SAP IDE
  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
  • 使用Visual Studio Code编写和激活ABAP代码

本文从另一个角度出发,单独聊聊ABAP开发环境里的语法高亮话题。

俗话说,佛靠金装,人靠衣装。咱们程序员虽然平日上班都穿千篇一律的职业装:

程序员专用的格子伞:

Jerry衣柜里最不缺这种衣服:

但幸好我们的开发环境还是能够进行各种个性化设置,所以虽然大家都穿着一样的格子衫,但面对的却是色彩各异的开发环境。比如SAPGUI的Options选项,给ABAP开发人员提供了种类丰富的ABAP编辑器UI元素风格的自定义设置,诸如背景色,关键字高亮颜色,注释高亮颜色,断点高亮颜色等等。

我们点了Save按钮后,这些个性化设置保存在本地某处。那么以ABAP编辑器为例,当我们用它来编写代码时,ABAP语言里的语法元素是如何根据不同的类型,进行对应的颜色高亮显示呢?

在SAPGUI设置选项里,进入Traces->Session Traces, 点击Enable按钮打开ABAP Editor的trace开关,回到ABAP编辑器,随便做一些操作,比如加一段注释,几个空格,激活代码之类。

然后打开生成的trace文件:
C:\Users<user name>\AppData\Local\SAP\SAP GUI\Traces\sapfewdll_01_0001_00_4272_2800.trc

能看到大段大段的CStyleCache::OnLinesChanged和CAbapFgLexer::InternalLexer这种C++里类的方法调用。

  • 189行:InvalidateLineStyle - 准备重绘ABAP代码第43883行的语法高亮
  • 190~191行:FindBeginOfStatement + FindEndOfStatement:找到这一行ABAP语句的起始和结束位置。
  • 193行:synchronous syntactical analysis started - 开始同步模式的语法分析
  • 195行:调用C++实现的编译器方法m_parser->run, 来完成ABAP语句的语法解析,总共花了89微秒。
  • 196行:分析结束。
  • 197行:根据编译器的分析结果,调用ISyncStyleCache::SetStylesSync进行对应元素的语法高亮显示。

从trace文件不难看出,这个ABAP语句语法分析和语法高亮渲染的同步过程会逐行处理语句,大家平时几乎感觉不到任何时延,是因为编辑的ABAP代码行数较少。

当Jerry在本地编辑ABAP git这个开源项目时,因为report源代码有将近五万行,所以当修改完代码激活之后,会感觉到长达好几秒钟的时延,在这几秒钟内,SAPGUI里的C++实现的编译器在忙碌地进行ABAP语句解析和语法高亮的工作。 在这些工作未完成之间,ABAP编辑器里将不会有语法高亮效果显示:​

如果不考虑cache的情况,在Jerry手上用的Thinkpad P50电脑上,假设按每行解析花费89微秒来计算,ABAP Git的语法高亮大概会消耗4秒钟的时间。

说完了SAPGUI,再来看看其他ABAP开发环境。虽然SAP WebIDE还不能做ABAP开发,但是在S/4HANA里,我们也能在浏览器里用ABAP编写Custom Logic了,并且支持语法高亮。

你也许会问,ABAP的语法高亮是如何在浏览器里显示的?自己动手,丰衣足食。

下面跟Jerry一起来通过调试的方式,自己找到问题的答案。

(1) 在浏览器里敲个ABAP的关键字,比如data。发现被高亮显示了。通过Chrome开发工具发现高亮是通过一个叫ace_keyword的css类实现的。

在Chrome开发工具里以关键字".ace_keyword"搜索: 发现这个css类是硬编码在theme-sap-cumulus.js里的。

(2) 现在需要找到浏览器里进行ABAP代码编辑的编辑器的实现。在Chrome开发工具里Network tab里输入“.xml”作为过滤条件,于是找到编辑器的Fiori实现: Editor.view.xml

具体的编辑器是实现在命名空间reuse的ABAPWrapper标签里。

根据这个命名空间找到实现ABAP编辑器的UI5应用,如下图: nw_aps_ext_lib.

打开ABAPWrapper-dbg.js, 在第68行设置断点。这个函数负责从ABAP后台取PAD文件,该文件和语法高亮有关。

刷新ABAP编辑器页面,断点触发,在调试器里观察PAD文件的内容:

所有的ABAP关键字都列在该PAD文件里,这样UI5就知道编辑器里哪些字符串应该做高亮显示。

(3) 最后一个问题就是,比如当我敲了一个ABAP关键字"new"之后,UI5应用具体哪行代码将对应的css类加到这个字符串对应的DOM节点上?

如下图,一旦我敲了一个字符w之后,字符串new作为一个关键字需要被高亮:

具体逻辑如下图:一旦敲入字符"w"后,onInput作为事件处理函数触发:

函数$renderLine负责生成对应的HTML源代码。输入字符"new"被传入函数getLineTokens来计算该字符串是关键字还是普通变量。

在文件AceRndTokenizer.js里, ABAP解析器按照我们期望的将“new”解析成关键字,因为解析器拥有PAD文件的引用,因此它知道哪些字符串是关键字,哪些是普通变量。

(4) DOM节点的源代码在此处生成,"ace"和“keyword"做连接操作,生成最后我们在Chrome开发工具里看到的完整css类ace_keyword.

谜底就这样揭晓了。

至于其他工具,比如Visual Studio Code,Sublime Text之类,严格意义上讲不能算作ABAP的开发环境,只能看成是ABAP代码的查看工具,其ABAP语法高亮的实现,咱们下次再聊,感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

0
0
分享到:
评论

相关推荐

    SAP ABAP 开发环境和开发工具介绍

    SAP ABAP 开发环境和开发工具介绍 SAP ABAP 开发环境和开发工具是 SAP 系统中最重要的组件之一,它提供了一个强大的开发平台,允许开发者创建、测试和部署 ABAP 程序。ABAP 是 SAP 系统中的主要编程语言,用于开发...

    ABAP 740 新语法.pdf

    ABAP语言是SAP系统中用于开发应用的核心编程语言,自从1980年代初期推出以来,它随着SAP系统版本的升级而不断演进。在SAP软件的各个版本中,ABAP7.40是一个重要的里程碑,因为它带来了一系列新的语法和特性,使...

    ABAP开发环境的安装

    ### ABAP开发环境的安装与配置 #### 一、安装前的准备工作 ##### 1. 系统备份 - **建议使用系统备份软件**(如GHOST)对当前的操作系统进行完整备份,以便在安装失败时能够快速恢复系统状态。 ##### 2. 分区格式 ...

    关于SAP开发语言abap的基础语法

    "ABAP基础语法" ABAP是高级企业应用程序语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。ABAP语言适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2 等...

    ABAP新语法.txt

    SAP HANA系统的查询语法有了许多更新,使用新语法能提高查询速度,特别是大数据的。本文档里面的内容放了大量的新语法,欢迎各位下载。

    ABAP开发从入门到精通-高清自学版 SAP+ABAP开发从入门到精通 SAP开发自学必读 SAP SAP开发自学入门到精通

    ABAP(Advanced Business Application Programming)是SAP公司推出的一种编程语言,主要用于开发SAP系统中的业务应用程序。SAP系统在全球企业资源规划(ERP)领域有着广泛的应用,而ABAP则是其核心开发语言,使得...

    手把手教你配置Eclipse开发SAP ABAP程序环境.docx

    从零开始,教授如何配置 Eclipse 开发 SAP ABAP 程序环境。2020 年最新版本操作笔记。对于初学者十分友好。 ABAP Development Tool的Java端实现就是Eclipse的一个扩展,使用JCO(Java Connector)连接ABAP后台的adt...

    非常全的 S4 ABAP 新语法(适用S4不适用ECC等老系统)

    在S4 ABAP新语法中,开发者可以利用一系列更新...以上是S4 ABAP新语法的一些核心特性,它们为开发人员提供了更多灵活性和便利性,同时优化了代码的可读性和维护性。掌握这些新功能将帮助开发者更高效地利用SAP S4系统。

    ABAP开发环境和总体介绍

    ### ABAP开发环境和总体介绍 #### 1.1 ABAP开发环境 ABAP(Advanced Business Application Programming)是一种专门用于SAP系统开发的高级编程语言。根据提供的内容,我们可以了解到ABAP开发可以在三种不同的环境下...

    ABAP语法详解教材

    这一章节会涵盖ABAP的工作原理,如ABAP工作区、事务码和开发环境。此外,还会介绍ABAP的编程环境,如SE80编辑器,以及如何创建和调试简单的ABAP程序。 第001章“创建简单的ABAP”将引导学习者编写第一个ABAP程序。...

    sapabap开发从入门到精通

    资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...

    abap几个语法示例

    根据提供的ABAP代码示例,我们可以总结出以下关键知识点: ### 1. 获取内表行数 在ABAP中,可以使用`DESCRIBE TABLE`命令来获取内表的结构和大小信息。此命令通常用于在运行时动态地确定表的类型和其他特性。 **...

    ABAP语法详解中文教材

    通过这份“ABAP语法详解中文教材”,学习者将能够全面了解并掌握ABAP的基础语法和高级特性,从而具备开发SAP系统应用的能力。每一个文档都可能详细阐述一个特定的主题,例如函数模块的使用、内部表的操作或是面向...

    ABAP 基本语法介绍.

    详细的abap基础语法介绍

    实战ABAP程序开发

    1. **第一章 ABAP开发环境和总体介绍**:这部分内容会引导初学者了解ABAP的开发环境,包括SE80事务码的使用,如何创建和管理源代码,以及如何在SAP系统中调试和测试程序。理解开发环境是学习任何编程语言的第一步,...

    SAP ABAP基本语法

    作为SAP的开发平台,ABAP提供了一系列的语法和结构,使得开发者可以构建复杂的业务逻辑和应用程序。下面我们将深入探讨ABAP的基本语法。 1. **数据类型**: ABAP支持多种数据类型,包括字符型(CHAR),数值型...

    SAP ABAP开发快捷键

    SAP ABAP开发快捷键 SAP ABAP开发是一种功能强大且灵活的编程语言,用于开发SAP系统中的业务逻辑。然而,在ABAP开发过程中,效率是一个非常重要的因素。为了提高开发效率,熟悉ABAP开发快捷键是非常必要的。在本文...

    ABAP_4语法集锦(中文版)

    ABAP/4是一种高级业务应用编程语言,广泛用于SAP系统的开发。本篇文章将深入探讨ABAP/4的语法特点,主要包括数据类型、变量声明、系统专用变量以及数据输出到屏幕的方法。 首先,我们来看看ABAP/4的数据类型。数据...

    第一次课--ABAP开发环境和开发工具的介绍.ppt

    第一次课--ABAP开发环境和开发工具的介绍.ppt

    ABAP开发语法概要

    ### ABAP开发语法概要 #### 数据定义 在ABAP编程语言中,数据定义是创建程序的基础步骤之一,主要包括类型声明、数据对象定义、值分配和计算等几个方面。 ##### 类型声明 类型声明用于定义数据对象的数据类型,...

Global site tag (gtag.js) - Google Analytics