Fortran语言元素与源格式详解
立即解锁
发布时间: 2025-08-16 01:29:52 阅读量: 13 订阅数: 38 


Fortran 2003: 完整语法与特性指南
### Fortran语言元素与源格式详解
#### 1. 词法标记
Fortran语句由低级语法构建而成,这些低级语法描述了基本的语言元素,即词法标记。词法标记是Fortran语句中最小的有意义单元,可由一个或多个字符组成。以下是一些常见的词法标记:
- **名称**:变量、命名常量、程序单元等都可以有名称。名称必须以字母开头,可包含字母、数字和下划线,且长度最多为63个字符。例如:`A`、`CAR_STOCK_NUMBER`、`A__BUTTERFLY`、`Z_28`、`TEMP_`。
- **关键字**:
- **语句关键字**:在语法规则中通常以大写字母出现,有些用于标识语句,如`DO`语句中的`DO`;有些用于界定语句的部分,如`USE`语句中的`ONLY`;还有些用于指定语句中的选项,如`INTENT`语句中的`IN`、`OUT`或`INOUT`。不过,Fortran中有两种语句没有语句关键字,即赋值语句和语句函数。
- **非语句关键字**:形式语法规则中的一些大写字母序列并非语句关键字,如词法标记`.EQ.`中的`EQ`和作为编辑描述符的`EN`。
- **常量**:
- **文字常量**:没有名称的值,如`1.23`、`400`、`( 0.0, 1.0 )`、`"ABC"`、`B’0110110’`、`.TRUE.`。文字常量不能是数组值或派生类型。
- **命名常量**:有名称的值,可以是任何类型,包括派生类型,也可以是数组值。例如:
```fortran
REAL, DIMENSION(2), PARAMETER :: X_AXIS = (/0.0, 1.0/)
TYPE(PERSON), PARAMETER :: MY_SPOUSE = PERSON( 39, ’PAT’ )
```
- **运算符**:用于与操作数结合在表达式中产生其他值。语言提供的运算符如`*`(表示数值乘法)、`//`(表示字符连接)、`==`(表示相等比较)、`.OR.`(表示逻辑或)、`.NOT.`(表示逻辑非)。用户也可以定义运算符,以句点开头和结尾,中间最多63个字母,且字母序列不能与任何内置运算符或逻辑常量相同。
- **语句标签**:由1到5位十进制数字组成,其中至少有一位非零。标签用于标识语句,可用于`DO`构造、`CALL`语句、分支语句和输入/输出语句。大多数情况下,同一程序单元中的两个语句不能有相同的标签。例如:
```fortran
100 CONTINUE
21 X = X + 1.2
101 FORMAT (1X, 2F10.2)
```
#### 2. 源格式
Fortran程序由一系列行组成,包括Fortran语句、注释和`INCLUDE`行,这些语句、注释和行的集合称为源文本。Fortran语句由一个或多个完整或部分行的源文本组成,并由低级语法构建。有两种源格式:自由源格式和固定源格式。
##### 2.1 自由源格式
自由源格式对语句在Fortran行上的位置没有限制,空白字符具有重要意义,可能需要用于分隔词法标记。其规则和限制如下:
1. **空白字符**:除字符上下文外,连续的空白字符被视为单个空白字符。可在标记和分隔符之间自由使用,以提高源文本的可读性。例如:
```fortran
SUM=SUM+A(I)
SUM = SUM + A (I)
```
这两条语句是相同的。
2. **行长度**:每行可包含0到132个默认字符类型的字符。如果有非默认字符类型的字符,处理器可能会限制字符数量。
3. **注释**:非字符上下文中的感叹号`!`用于表示注释的开始,注释到行尾结束。注释行的第一个非空白字符是`!`,注释被忽略,不影响Fortran语句的解释。例如:
```fortran
ITER = ITER + 1
! Begin the next iteration.
```
4. **续行符号**:`&`用作续行符号。如果它是删除注释后最后一个非空白字符且不在字符上下文中,语句将在下一个非注释行继续。例如:
```fortran
STOKES_LAW_VELOCITY = 2 * GRAVITY * RADIUS ** 2 *
&
(DENSITY_1 - DENSITY_2) / (9*COEFF_OF_VISCOSITY)
```
一个Fortran语句最多允许255个续行。
5. **语句分隔符**:分号`;`用作语句分隔符,但不能是行的第一个非空白字符。例如:
```fortran
X = 1.0;
Y = 2.0
```
6. **标签**:标签可出现在语句之前,但必须与语句至少用一个空白分隔。例如:
```fortran
```
0
0
复制全文
相关推荐










