解析代码的算法

代码一般是敲出来的,凝聚着程序员的心血。通过解释器或编译器的验证,正确的代码一般都符合必定的语法规则。一般有如下几种规则:程序员

关键字:keyword正则表达式

这些单词一般表明了特殊的意思,是语言中的保留字,不能用做变量名称或函数名称(有些语言能用变量保存函数)。例如 Javascript, PHP 中的 function, 大多数语言中的 if else then.数组

标识符 identifierruby

这些符号和 keyword 同样,也有特别的意思,不一样的组合有着不一样的意思,例如 == != >= ...数据结构

注释,字符串或正则表达式(ruby 将正则表达式列为一种新的数据类型)ide

这些结构一般都有特定的开始字符和结束字符,在结构中,能够出现和语法大相径庭的字符组合。 但一种结构中不可能存在另一种结构,是独立的结构。例如注释中,不可能有字符串,而字符串中也不能存在注释(Perl6 彷佛打破了这个规则,能够在任意结构中插入注释).函数

能够嵌套的结构递归

数据结构一般是能够嵌套的,数组中的元素也能够是数组。条件判断或循环结构也能够嵌套。一个循环中能够用判断,而判断中一样能够用循环的结构。ip

能够用正则表达式描述的结构字符串

正则表达式能够描述一个结构的组合,其中某个部分无关紧要,也能够屡次出现,但必须按照必定的顺序,这种能够用正则表达式描述(学术专家称为 BNF 或 EBNF)的结构,几乎能够描述全部的语法规则。 例如 <List> := ( id1 { , id2 }), 其中 { , id2 } 就是能够屡次出现的结构。

在许多描述语法的表示方法中,存在一种递归表示法,也就是一种结构,同时也包含自身。这是定义上的一个表示法,描述的是一种能够嵌套的结构。若是能将这种结构提早进行解析的话,就不须要这种让人难以理解的表示方法了。

相关文章
相关标签/搜索