var str = "string"
LLVM如何检测变量是一个字符串?
答案 0 :(得分:6)
编译器按步骤完成工作,类型推断是此过程中的一个步骤。
通常,作为第一步,编译器执行词法分析,其中将输入文件字节拆分为数字和字符串等单位(注意:还不是字符串,其含义与您引用的相同)并抛弃空白和评论。
例如,它将示例中的输入流拆分为var
,str
,=
,"
,string
,"
。
第二步是语法分析或解析,其中编译器根据语言的语法构造和验证abstract syntax tree。
在这种情况下,它将构造一个抽象语法树,表示形式的变量声明语句(参见语言参考中的Declaration statements):
var variable_name = expression
其中表达式是字符串文字:
var variable_name = string_literal
第三步是语义分析,并在此步骤中进行类型推断。在这种情况下,类型推断推断字符串文字的类型为String
,并且因为没有关于变量str
的其他信息,它将推断str
必须是{{1}因为表达式(变量声明的右侧)属于String
类型。
此步骤后还有更多步骤。作为后续步骤,编译器通常生成中间代码,然后优化中间代码,最后生成汇编代码。之后,编译器外部的工具链通常至少具有生成最终可执行文件的链接阶段。