# 语法检查


模型创建完成后,需要根据 Modelica 规范定义的语法规则对模型进行语法检查。

# 标识符合法性检查

标识符用于 Modelica 语言的各项要素的命名,例如类名、变量名、常量名等,由一系列字母、数字或其它字符(如下划线)构成。

Modelica 标识符有两种形式。

  • 第一种形式:以字母或下划线 “_” 开始,后接任意数量的字母、数字或下划线 “_”。标识符区分大小写,MaxValuemaxValue是两个不同的标识符。

    例如,_MyFuncresistorR20是合法的标识符,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;