示例代码:
1 if ( a == 10) { 2 printf("hoge\n"); 3 } else { 4 printf("piyo\n"); 5 }
一般编程语言的语法处理(这与编译性语言或者是解释性语言无关),都会有如下的过程:
- 词法分析,将源代码分割为若干个记号(token)的处理;
示例部分代码在执行完词法分析过程后,将被分割为如下的记号,
执行词法分析的程序称为词法分析器(lexical analyzer),lex的工作就是根据词法规则自动生成词法分析器。 - 语法分析,即从记号构建分析树的处理,分析树也叫语法树,或者是抽象语法树;
执行语法分析的程序称为解析器(parser),yacc就是根据语法规则自动生成解析器的程序。 - 语义分析,经过语法分析生成的分析树,并不包含数据类型等语义信息,因此在语义分析阶段,会检查程序中是否含有语法正确但是存在逻辑问题的错误。
时间: 2024-12-05 17:13:42