从字符组织到程序结构

语言需要约定哪些字符和符号构成有意义的程序输入。词法规则把输入组织为名字、字面量和运算符等词法单元,语法规则进一步规定这些单元怎样组成表达式、语句及其他结构。某个符号在注释、字符串或运算位置出现,解释方式可以不同。

Python语言参考用形式文法描述词法与语法,同时用文字说明许多其他规则。这说明编程语言不能只靠一份关键词清单定义;还需说明结构、名字的作用及各项操作应怎样理解。

参考:[1]

语法成立不等于运行成功

符合语法,只说明程序采用了允许的结构,不保证执行结果符合要求。Python的“字符串2加整数2”可以通过语法分析,却在执行时触发类型错误;缺少语句所需冒号则属于另一层的语法错误。判断程序时须分清结构规则与执行规则。

运行中还可能遇到未定义名字、除零或外部资源不可用等情况,具体处理由语言及相关接口规定。错误信息揭示的是某一规则或操作失败,不自动说明业务目标怎样修复;语言合法性与应用正确性仍是不同要求。

参考:[2]

一种语言可以有多种实现

编译器或解释器实现语言所规定的行为,可以使用不同内部表示、运行时与优化技术。CPython和PyPy都是Python实现,内部执行方式却不相同。某个实现采用字节码或即时编译,不代表语言定义要求所有实现都采用同一路径。

实现还可能提供扩展或保留差异,版本变化也会改变可用规则。移植程序时应核对语言版本、实现限制以及依赖的库和环境,而不能因为源文件使用同一种语法,就假定任意实现与平台上都有相同能力和性能。

参考:[1]