mirror of
https://gitlab.com/scemama/irpf90.git
synced 2024-11-19 04:22:23 +01:00
409 lines
11 KiB
Python
409 lines
11 KiB
Python
#!/usr/bin/python
|
|
# IRPF90 is a Fortran90 preprocessor written in Python for programming using
|
|
# the Implicit Reference to Parameters (IRP) method.
|
|
# Copyright (C) 2009 Anthony SCEMAMA
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
# Anthony Scemama
|
|
# LCPQ - IRSAMC - CNRS
|
|
# Universite Paul Sabatier
|
|
# 118, route de Narbonne
|
|
# 31062 Toulouse Cedex 4
|
|
# scemama@irsamc.ups-tlse.fr
|
|
|
|
import os
|
|
from zlib import crc32
|
|
|
|
irpdir = "IRPF90_temp/"
|
|
mandir = "IRPF90_man/"
|
|
irp_id = abs(crc32(os.getcwd()))
|
|
|
|
|
|
class Line(object):
|
|
def __init__(self,i,text,filename):
|
|
self.i = i
|
|
self._text = None
|
|
self.filename = filename
|
|
self._lower = None
|
|
self.set_text(text)
|
|
|
|
def get_text(self):
|
|
return self._text
|
|
|
|
def set_text(self,value):
|
|
self._text = value
|
|
self._lower = value.lower()
|
|
|
|
def get_lower(self):
|
|
return self._lower
|
|
|
|
text = property(fget=get_text, fset=set_text)
|
|
lower = property(fget=get_lower)
|
|
|
|
class Empty_line(Line):
|
|
str="Empty_line"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Empty_line",self.i,self.text)
|
|
|
|
class Simple_line(Line):
|
|
str="Simple_line"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Simple_line",self.i,self.text)
|
|
|
|
class Declaration(Line):
|
|
str="Declaration"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Declaration",self.i,self.text)
|
|
|
|
class Continue(Line):
|
|
str="Continue"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Continue",self.i,self.text)
|
|
|
|
class Begin_provider(Line):
|
|
str="Begin_provider"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Begin_provider",self.i,self.text)
|
|
|
|
class Cont_provider(Line):
|
|
str="Cont_provider"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Cont_provider",self.i,self.text)
|
|
|
|
class End_provider(Line):
|
|
str="End_provider"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("End_provider",self.i,self.text)
|
|
|
|
class Begin_doc(Line):
|
|
str="Begin_doc"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Begin_doc",self.i,self.text)
|
|
|
|
class Doc(Line):
|
|
str="Doc"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Doc",self.i,self.text)
|
|
|
|
class End_doc(Line):
|
|
str="End_doc"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("End_doc",self.i,self.text)
|
|
|
|
class Begin_shell(Line):
|
|
str="Begin_shell"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Begin_shell",self.i,self.text)
|
|
|
|
class End_shell(Line):
|
|
str="End_shell"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("End_shell",self.i,self.text)
|
|
|
|
class Begin_template(Line):
|
|
str="Begin_template"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Begin_template",self.i,self.text)
|
|
|
|
class End_template(Line):
|
|
str="End_template"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("End_template",self.i,self.text)
|
|
|
|
class Subst(Line):
|
|
str="Subst"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Subst",self.i,self.text)
|
|
|
|
class Assert(Line):
|
|
str="Assert"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Assert",self.i,self.text)
|
|
|
|
class Touch(Line):
|
|
str="Touch"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Touch",self.i,self.text)
|
|
|
|
class SoftTouch(Touch):
|
|
str="SoftTouch"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("SoftTouch",self.i,self.text)
|
|
|
|
class Irp_read(Line):
|
|
str="Irp_read"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Irp_read",self.i,self.text)
|
|
|
|
class Irp_write(Line):
|
|
str="Irp_write"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Irp_write",self.i,self.text)
|
|
|
|
class Irp_If(Line):
|
|
str="Irp_If"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Irp_If",self.i,self.text)
|
|
|
|
class Irp_Else(Line):
|
|
str="Irp_Else"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Irp_Else",self.i,self.text)
|
|
|
|
class Irp_Endif(Line):
|
|
str="Irp_Endif"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Irp_Endif",self.i,self.text)
|
|
|
|
class Openmp(Line):
|
|
str="Openmp"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Openmp",self.i,self.text)
|
|
|
|
class Directive(Line):
|
|
str="Directive"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Directive",self.i,self.text)
|
|
|
|
class Use(Line):
|
|
str="Use"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Use",self.i,self.text)
|
|
|
|
class Do(Line):
|
|
str="Do"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Do",self.i,self.text)
|
|
|
|
class Enddo (Line):
|
|
str="Enddo"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Enddo",self.i,self.text)
|
|
|
|
class If(Line):
|
|
str="If"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("If",self.i,self.text)
|
|
|
|
class Elseif(Line):
|
|
str="Elseif"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Elseif",self.i,self.text)
|
|
|
|
class Else(Line):
|
|
str="Else"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Else",self.i,self.text)
|
|
|
|
class Endif(Line):
|
|
str="Endif"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Endif",self.i,self.text)
|
|
|
|
class Select(Line):
|
|
str="Select"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Select",self.i,self.text)
|
|
|
|
class Case(Line):
|
|
str="Case"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Case",self.i,self.text)
|
|
|
|
class End_select(Line):
|
|
str="End_select"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("End_select",self.i,self.text)
|
|
|
|
class Program(Line):
|
|
str="Program"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Program",self.i,self.text)
|
|
|
|
class Subroutine(Line):
|
|
str="Subroutine"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Subroutine",self.i,self.text)
|
|
|
|
class Function(Line):
|
|
str="Function"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Function",self.i,self.text)
|
|
|
|
class Call(Line):
|
|
str="Call"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Call",self.i,self.text)
|
|
|
|
class Provide(Line):
|
|
str="Provide"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Provide",self.i,self.text)
|
|
|
|
class NoDep(Line):
|
|
str="NoDep"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("NoDep",self.i,self.text)
|
|
|
|
class Return (Line):
|
|
str="Return"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Return",self.i,self.text)
|
|
|
|
class Include(Line):
|
|
str="Include"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Include",self.i,self.text)
|
|
|
|
class Implicit (Line):
|
|
str="Implicit"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Implicit",self.i,self.text)
|
|
|
|
class Free(Line):
|
|
str="Free"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Free",self.i,self.text)
|
|
|
|
class End(Line):
|
|
str="End"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("End",self.i,self.text)
|
|
|
|
class Provide_all (Line):
|
|
str="Provide_all"
|
|
def __init__(self,i,text,filename):
|
|
Line.__init__(self,i,text,filename)
|
|
def __repr__(self):
|
|
return "%20s:%5d : %s"%("Provide_all",self.i,self.text)
|
|
|
|
|
|
######################################################################
|
|
|
|
def create_irpf90_files():
|
|
result = []
|
|
from command_line import command_line
|
|
import os
|
|
def is_irpf90_file(filename):
|
|
return filename.endswith(".irp.f") and not filename.startswith('.')
|
|
result = filter ( is_irpf90_file, os.listdir(os.getcwd()) )
|
|
for dir in command_line.include_dir:
|
|
try:
|
|
os.stat(dir)
|
|
result += map(lambda x: dir+x, filter ( is_irpf90_file, os.listdir(dir) ) )
|
|
except:
|
|
continue
|
|
if command_line.do_codelet:
|
|
result += [command_line.codelet[3]]
|
|
return result
|
|
irpf90_files = create_irpf90_files()
|
|
|
|
|
|
|
|
|