如何设置errorformat捕捉gfortran 输出的错误?

Vim、Emacs配置和使用
回复
vliqi
帖子: 116
注册时间: 2005-10-07 18:55
送出感谢: 0
接收感谢: 0

如何设置errorformat捕捉gfortran 输出的错误?

#1

帖子 vliqi » 2006-05-19 12:45

gfortran的输出如下

代码: 全选

E:\test>gfortran main.f90
 In file main.f90:7

                        write(*,*'AAAAAAAAA!'
                                1
Error: Syntax error in WRITE statement at (1)
 In file main.f90:9

                write(*,*
                        1
Error: Syntax error in WRITE statement at (1)

E:\test>
第一行很容易捕捉,但是如何忽略第二行(空行)和第三行(出错行,没有任何规律),第四行输出的“1”可以得到出错的列数(用%p1已经捕捉到),第四行还没有实现。[/code]
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#2

帖子 eexpress » 2006-05-19 14:41

写个bash。作为命令的管道就是了。bash里面可以处理这些。
grep也可以。要1,4? 还是要出错的行号?你把需要的用颜色标记出来吧。
● 鸣学
vliqi
帖子: 116
注册时间: 2005-10-07 18:55
送出感谢: 0
接收感谢: 0

#3

帖子 vliqi » 2006-05-19 18:05

E:\test>gfortran main.f90
In file main.f90:7

write(*,*'AAAAAAAAA!'
1
Error: Syntax error in WRITE statement at (1)
In file main.f90:9

write(*,*
1
Error: Syntax error in WRITE statement at (1)

E:\test>
其中红色的行时我需要的,绿色的是没有用的,但是我是想用VI自己处理,因为VI通过设置errorformat就可以实现编译之后直接定位到相应的错误行。
头像
roylez
论坛版主
帖子: 1928
注册时间: 2005-10-04 10:59
来自: 上海
送出感谢: 0
接收感谢: 1 次

#4

帖子 roylez » 2006-05-20 17:42

我在网上搜了下,没有找到gfortran的errorformat样本。有个日本人曾经试着写过,但是不能成功捕捉%m。我试了半天,也是一样,也许你可以给维护fortran syntax file和compiler file的ajit(ajit @ unb . ca )发信,让他给g95写一个。我曾经为fortran的syntax file骚扰过他一次,因为他是加拿大的教授,所以还有些不大好意思。其实vim自己就带了几个fortran编译器的errorformat文件,在$VIMRUNTIME/compiler/下,大多是ajit写的。网上还有intel fortran compiler的errorformat,虽然是写给8.0的,但是我试过,同样适用于ifort 9.0。
把日本人的关于gfortran的errorformat的讨论贴在下面。

代码: 全选

From: Kamaraju Kusumanchi <kamaraju@...>
Date: Fri Apr 29, 2005  6:26 pm
Subject: error format for gfortran 	kamaraju@...
Send Email Send Email

Hi
    I am struggling with writing an errorformat for gfortran (gcc
compiler for fortran). I am wondeing if anyone can help. Consider the
samecode

program welcome
   implicit none

   write(*,*) 'welcome'
   some
end program welcome

I added the line some to produce an error message.

$gfortran welcome.f90
  In file welcome.f90:5

   some
  1
Error: Unclassifiable statement at (1)


For this error I tried to write the compiler plugin with the
errorformat string set to

CompilerSet errorformat=
	 \%E\ In\ file\ %f:%l,
	 \%C\ %p%*[1],
	 \%CError:\ %m,
	 \%Z

But for some reason I am not able to catch that error message. Can
anyone help me please?

raju


弄个dropbox空间来备份文件或者做私人代码服务器
配置:[url]git://github.com/roylez/dotfiles.git[/url]
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info
vliqi
帖子: 116
注册时间: 2005-10-07 18:55
送出感谢: 0
接收感谢: 0

#5

帖子 vliqi » 2006-05-21 9:27

这是我仿照g77写的,可以解决大部分问题。

代码: 全选

" Vim compiler file
" Compiler:     gfortran (GNU Fortran 90)
" Maintainer:   Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
" Last Change:  $Date: 2002/06/12 09:17:11 $
" $Revision: 1.7 $

if exists("current_compiler")
  finish
endif
let current_compiler = "fortran_gfortran"

if exists(":CompilerSet") != 2		" older Vim always used :setlocal
  command -nargs=* CompilerSet setlocal <args>
endif

let s:cpo_save = &cpo
set cpo-=C

" Note: The errorformat assumes GNU make

" sample multiline errors (besides gcc backend one-liners):
" gev.f:14:
"	   parameter UPLO = 'Upper-囗囗囗囗囗囗囗囗'
"	   ^
" Unsupported VXT statement at (^)
" gev.f:6:
"	   integer	   desca( * ), descb( * )
"			   1
" gev.f:19: (continued):
"	   end subroutine
"	   2
" Invalid declaration of or reference to symbol `desca' at (2) [initially seen at (1)]

CompilerSet errorformat=
	\%Omake:\ %r,
	\%f:%l:\ warning:\ %m,
	\%A%f:%l:\ (continued):,
	\%W%f:%l:\ warning:,
	\%A\ In\ file\ %f:%l,
	\%-C,
	\%-C%p%*[0123456789^]%.%#,
	\%-C\ %.%#,
	\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
	\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
	\%DMaking\ %*\\a\ in\ %f,
	\%Z%m\ at\ (%*[0123456789^])

let &cpo = s:cpo_save
unlet s:cpo_save
缺陷有:1.出现错误的那一行不能顶格写,前面要有空格,一般是可以做到的。2.不能区分出error和warning。
慢慢改进吧,下面是效果图。
附件
.PNG
效果图
回复

回到 “Vim和Emacs”