# 语法检查
模型创建完成后,需要根据 Modelica 规范定义的语法规则对模型进行语法检查。
# 标识符合法性检查
标识符用于 Modelica 语言的各项要素的命名,例如类名、变量名、常量名等,由一系列字母、数字或其它字符(如下划线)构成。
Modelica 标识符有两种形式。
第一种形式:以字母或下划线 “_” 开始,后接任意数量的字母、数字或下划线 “_”。标识符区分大小写,
MaxValue和maxValue是两个不同的标识符。例如,
_MyFunc、resistor、R20是合法的标识符,3num不是合法的标识符;第二种形式:以单引号开始,后接任意字符(如果是单引号则在之前加“\ ”),最后以单引号结束。单引号是标识符的一部分,
'num'与num是不同的标识符。这种标识符一般用于操作符重载,其它情况下不推荐使用。例如,
'3num'、'+.'、'the\'3\'num'、'my friends'都是合法的标识符。
Modelica 关键字是保留的,不能用做标识符。下表列出了 Modelica 当前版本规范中定义的关键字。
| algorithm | discrete | false | model | redeclare |
|---|---|---|---|---|
| and | each | final | not | replaceable |
| annotation | else | flow | operator | return |
| assert | elseif | For | or | stream |
| block | elsewhen | function | outer | then |
| break | encapsulated | If | output | true |
| class | end | import | package | type |
| connect | enumeration | In | parameter | when |
| connector | equation | initial | partial | while |
| constant | expandable | inner | protected | within |
| constrainedby | extends | input | public | |
| der | external | loop | record |
标识符合法性检查就是检查标识符是否符合第一种或第二种形式,以及是否与 Modelica 关键字有冲突。
# 语法检查规则
语法检查是根据 Modelica 规范定义的语法规则检查模型的语法是否符合要求,也就是检查关键字、标识符、运算符、字符串、数字、注释等的组合是否符合 Modelica 的语法形式。Modelica 语法形式是依据 EBNF 范式规则定义的,详细信息,请参见 Modelica 语言规范。
# 词法语法错误
词法错误是指字符与数字的组合不能构成有效的关键字、标识符、运算符、字符串、数字等。例如:
model LexicalError
Real 3var = time; // 标识符3var不合法
end LexicalError;
语法错误是指关键字、标识符、运算符、字符串、数字、注释等的组合不符合 Modelica 语法规范。例如:
model SyntaxError
Real x[5], y[6];
equation
for i // i后面缺少关键字loop
x[i] = i ^ 2;
end for;
for i loop
y[i] = i * 2;
end while; // 关键字while应改为for
end SyntaxError;