z/OS上的PL/I 和COBOL都是Enterprise Edition了,名字看上去很牛逼,实际还是那么的落后,落后在哪里呢?
COBOL的编译输出信息格式是这样的:
IGY*-错误级别 行号 出错信息,比如:
IGYXX0001-W 0120 A blank was missing before character "?" in column ?.A blank was assumed.
这时你用120作为行号去原始的代码里找,你会发现这一行不是你要找的错误所在,这就是傻的地方.
这个行号完全没有任何实际意义,好笑的是这个行号对应了被编译预处理过的,中间代码中的行号,而不是和你写的那个实际文件对应.
也就是说你得用这个行号去编译结果里一行一行找到实际代码是什么内容,再根据这个具体内容到你的文件里对应到那一行再修改错误.
PLI的编译输出信息是这样的:
IBM* 错误级别 行号.文件编号 出错信息, 比如:
IBM1507I S 120.0 Arrays of label constants may not be passed as arguments.
对于不含CICS或者SQL语句的程序,你用120.0去源文件里查找到120这一行,你会发现这行正是编译器报告错误的地方.
很不幸的是,对于含有CICS或者SQL语句的程序,它又傻了,因为编译器会展开CICS或者SQL语句,
编译结果中展开后的行号完全不能和源代码对应起来,又是犯了和上面说的COBOL一样的傻问题.
我想说IBM太傻,太懒,一点也不为用户考虑,Mircro Focus在Unix平台上的COBOL编译器就做得非常优秀,错误信息的地方同时附上错误代码和行号,而且确切的就是那一行.
我要用awk和sed这些优秀的工具改造IBM的那一大坨屎,就是要和Mircro Focus一样,错误信息后面给出具体的错误语句:
对于COBOL,结果是这样的:
IGYXX0001-W 0120 A blank was missing before character "T" in column 14.A blank was assumed.
MOVE ATO B
对于PLI,结果是这样的:
IBM1847I S 120.0 GOTO target is inside a (different) DO loop.
GOTO LABLEA
也就是一行出错信息,紧接着下一行就是出错的语句.
基本原理就是分别抽取编译结果中的预处理过的代码,生成一个文件,比如src,包含了具体行号和内容.
再抽取编译结果里的出错信息,生成一个文件,比如mes.
首先得用sed对这两个文件进行一些预先的处理,去掉行首的0,IBM的Mainframe上用行首(第一列)的0表示翻页什么的,以及去掉每一页的标题.
之后的关键操作就是用awk同时读入这两个文件,首先读入src,抽取行号这一个字段作为数组下标,保存这一行内容到awk临时数组中,
处理完src文件接着读入mes,这个时候,遇到一条编译出错信息即抽取出错信息中的行号字段,用这个行号匹配之前的临时数组,
把对应临时数组中的内容打印在这条出错信息的下一行,基本就是这样的操作了.
语句示例:
awk'NR==FNR{a[$1]=$0} /
NR> FNR {if($0 ~ /IBM/){printf "/n"};print $0;if(a[$3] ~! //){print a[$3];}} /
/tmp/compilersrc /tmp/compilermes
compilersrc即是预处理的代码文件,compilermes是编译出错信息.
相关推荐
### 在Windows下搭建Objective-C开发环境 随着移动应用开发的普及,越来越多的开发者开始尝试不同的编程语言和技术栈。尽管Objective-C主要与Apple的平台(如iOS和macOS)相关联,但有时候,出于某些原因(比如团队...
此编译包是Vim的8.2版本,专为CentOS x86架构设计,适合那些需要在该环境下进行高效文本编辑的用户。在安装这个编译包之前,我们先来了解一下Vim 8.2的一些主要特点和安装步骤。 **Vim 8.2的主要特性:** 1. **...
在IT领域,文本编辑器Vim、流处理工具Sed和Awk以及操作系统Linux是三个极其重要的基础工具。这些工具的高效使用对于任何系统管理员、开发者或是IT专业人员来说都是必不可少的技能。以下是对这三个主题的详细解释: ...
在 Windows 7 系统中使用 Cygwin 搭建 Hadoop 开发环境是一项较为复杂的任务,需要对 Windows 系统环境变量、Cygwin 的安装与配置以及 Hadoop 安装包进行细致的操作。本文将详细介绍这一过程,帮助读者更好地理解并...
vim-航空公司主题 这是的官方主题库 安装 该插件遵循标准的运行时路径结构,因此可以与各种插件管理器一起安装: 插件管理器 安装... git clone https://github.com/vim-airline/vim-airline-themes ~/.vim/bundle...
Linux 下 C++ 开发环境搭建 Linux 作为一个开源的操作系统,广泛应用于服务器、嵌入式系统和个人计算机等领域。作为一名 C++ 开发者,在 Linux 平台上搭建一个完整的 C++ 开发环境是非常必要的。本文将详细介绍...
export PATH=$PATH:/usr/local/vim/bin tar xf ncurses_5.9.orig.tar.gz mv ncurses-5.9/ ncurses cd ncurses ./configure --prefix=/usr/local/ncurses --without-cxx make sudo make install sudo cp -rf /...
bash shell awk vim bash shell awk vim bash shell awk vim bash shell awk vim
Linux 下由 VIM 搭建 C/C++ 开发环境介绍 Linux 作为一个开源的操作系统,广泛应用于服务器、嵌入式系统、移动设备等领域,而 C/C++ 作为最基础的编程语言,广泛应用于操作系统、应用程序、嵌入式系统等领域。为了...
- **Memcached**:是一种高性能的分布式内存对象缓存系统,用于通过缓存数据库查询结果减少数据库负载,加速动态Web应用,提高网站访问速度。 - **PHP**:一种广泛使用的开源脚本语言,尤其适用于Web开发并可嵌入...
VMware-VCSA-all-6.7.0-15132721...VMware-VIM-all-6.7.0-15132721.iso/2.08GB VMware-VirtualSAN-Witness-201912001-15160138.ova/475.94MB VMware-VMvisor-Installer-201912001-15160138.x86_64.iso/335.02MB 等等
本文将详细讲解如何配置Vim为C/C++的开发环境,使其具备类似IDE的功能,如函数补全、小括号补全等。 首先,我们需要了解Vim的基本操作,它是一个命令行下的文本编辑器,可以通过键盘快捷键进行高效的文本处理。在...
关于如何安装和使用 vim-go 的简单教程。目录快速设置你好世界运行它构建它修复它测试一下盖上編輯导入文本对象结构拆分与连接片段美化它检查一下导航备用文件转到定义在功能之间移动理解它文档查找标识符解析标识符...
linux下编译/交叉编译openssl-1.1.1g生成动态库和静态库方法: 一、编译linux版本 1. cp openssl-1.1.1g.tar.gz /opt/ 2. tar -zxvf openssl-1.1.1g.tar.gz 3. mkdir build 4. ./config --prefix=/opt/openssl-1.1.1...
基于win32版本vim82搭建IDE,解压文件到自定义目录下即可,并设置系统环境变量VIM 值为该目录。并自带以下插件 Plugin 'VundleVim/Vundle.vim' Plugin 'Valloric/YouCompleteMe' "代码补齐 Plugin 'SirVer/ultisnips...
- 使用`yum –y install *gcc*`命令安装必要的编译工具。 2. **下载并解压相关软件包**: - freetype-2.4.3.tar.gz - libpng-1.4.4.tar.gz - jpegsrc.v8b.tar.gz - gd-2.0.33.tar.gz - httpd-2.2.15.tar.gz ...
sudo apt-get remove vim-tiny sudo apt-get install vim # 调试插件 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ipdb git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle...
下面我们将详细探讨Windows环境下使用Vim的相关知识点。 1. **安装GVim** - 下载:GVim的Windows安装包通常以.exe结尾,如"gvim73.exe"。你可以从Vim的官方网站或其他可信源下载最新版本。 - 安装过程:运行下载...
- **定义**: VMware vCenter Infrastructure Manager (VIM) 是一款由VMware公司开发的管理工具,主要用于监控和管理虚拟化环境中的资源使用情况。 - **功能**: VIM支持实时监控、性能管理和资源优化等功能,帮助...
本文详细介绍了如何在Linux环境下从源码编译安装LAMP架构的过程。通过遵循上述步骤,你可以搭建起一个功能完备且高度定制化的Web服务器环境。LAMP架构不仅适用于小型项目,也是许多大型网站和应用的首选方案之一。...