編輯:關於android開發
關於“靜態類型檢查”,想必使用C 或Java 的各位應該非常熟悉了。在此過程中將檢查表達式的類型,發現類型不正確的操作時就會報錯。例如結構體之間無法用+ 進行加法運算,指針和數值之間無法用* 進行乘法運算,將數組傳遞給參數類型為int 型的函數會出現莫名其妙的結果。在編譯過程中檢查是否符合這樣的限制的處理就是靜態類型檢查。
在靜態類型檢查過程中也會實施隱式類型轉換。
/*入口
*
*/
public void check(AST ast) throws SemanticException {
/*
* 第1 個foreach 語句對全局變量的定義進行遍歷,
*/
for (DefinedVariable var : ast.definedVariables()) {
checkVariable(var);
}
/*
* 第2 個foreach 語句對函數定義進行遍歷,並實施類型檢查。
*/
for (DefinedFunction f : ast.definedFunctions()) {
currentFunction = f;
checkReturnType(f);
checkParamTypes(f);
check(f.body());
}
if (errorHandler.errorOccured()) {
throw new SemanticException("compile failed.");
}
}
/*
* checkVariable 方法在檢查變量的類型是否為非void 的同
時,還對變量的初始化表達式進行遍歷。
*/
private void checkVariable(DefinedVariable var) {
if (isInvalidVariableType(var.type())) {
error(var.location(), "invalid variable type");
return;
}
if (var.hasInitializer()) {
if (isInvalidLHSType(var.type())) {
error(var.location(), "invalid LHS type: " + var.type());
return;
}
check(var.initializer());
var.setInitializer(implicitCast(var.type(), var.initializer()));
}
}
/*
* checkReturnType 方法檢查函數返回值的類型是否為非結
構體、聯合體或數組。這裡再重復一下,Ocelot中函數不能返回結構體或聯合體。
*/
private void checkReturnType(DefinedFunction f) {
if (isInvalidReturnType(f.returnType())) {
error(f.location(), "returns invalid type: " + f.returnType());
}
}
/*
* checkParamTypes 方法檢查函數形參的類型是否為非結構體、聯合體或void。因為Ocelot
中函數參數的類型不能是結構體或聯合體。
*/
private void checkParamTypes(DefinedFunction f) {
for (Parameter param : f.parameters()) {
if (isInvalidParameterType(param.type())) {
error(param.location(),
"invalid parameter type: " + param.type());
}
}
}
/*
* check 是遍歷參數節點的方法。各節點類會重寫該函數,通過調用check(f.
body()) 對函數體進行遍歷。
*/
private void check(StmtNode node) {
visitStmt(node);
}
Android二手交易平台,dagger2+mvp+Bmob後台雲搭建,dagger2bmob
Android二手交易平台,dagger2+mvp+Bmob後台雲搭建,dagger2bmob二手交易平台 我的畢業設計項目安卓源碼,二手交易平台,dagger2+mvp
Android中ListView實現圖文並列並且自定義分割線(完善仿微信APP),androidlistview
Android中ListView實現圖文並列並且自定義分割線(完善仿微信APP),androidlistview昨天的(今天凌晨)的博文《Android中Fragment
我的Android進階之旅------)關於android:layout_weight屬性的詳細解析
我的Android進階之旅------)關於android:layout_weight屬性的詳細解析 關於android:layout_weight屬性的詳細解析 效
關於我,關於我們
關於我,關於我們個人微信公眾號:zhaoyanjun125 , 歡迎關注 QQ交流群:431048982