llvmir some opt
This commit is contained in:
49
frontend/ast/func/FuncFParam.java
Normal file
49
frontend/ast/func/FuncFParam.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package frontend.ast.func;
|
||||
|
||||
import frontend.ast.Node;
|
||||
import frontend.ast.SyntaxType;
|
||||
import frontend.lexer.TokenStream;
|
||||
import frontend.lexer.TokenType;
|
||||
|
||||
import midend.symbol.Symbol;
|
||||
import midend.symbol.SymbolType;
|
||||
import midend.symbol.ArraySymbol;
|
||||
|
||||
import error.Errors;
|
||||
import frontend.ast.token.TokenNode;
|
||||
import error.ErrorType;
|
||||
import error.Error;
|
||||
|
||||
public class FuncFParam extends Node {
|
||||
public FuncFParam(TokenStream ts) {
|
||||
super(SyntaxType.FUNC_FORMAL_PARAM, ts);
|
||||
}
|
||||
|
||||
public void parse(Errors errors) {
|
||||
TokenNode intkk = new TokenNode(this.ts);
|
||||
addChild(intkk);
|
||||
TokenNode ident = new TokenNode(this.ts);
|
||||
addChild(ident);
|
||||
if (getCurrToken().getType() == TokenType.LBRACK) {
|
||||
TokenNode lbrack = new TokenNode(this.ts);
|
||||
addChild(lbrack);
|
||||
if (getCurrToken().getType() == TokenType.RBRACK) {
|
||||
TokenNode rbrack = new TokenNode(this.ts);
|
||||
addChild(rbrack);
|
||||
} else {
|
||||
errors.addError(new Error(this.ts.peek(-1).getLine(), ErrorType.k));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Symbol getSymbol() {
|
||||
if (getChildren().size() == 2) {
|
||||
TokenNode tn = (TokenNode) getChild(1);
|
||||
return new Symbol(tn.getName(), SymbolType.INT, tn.getLine());
|
||||
} else {
|
||||
TokenNode tn = (TokenNode) getChild(1);
|
||||
return new ArraySymbol(tn.getName(), SymbolType.INT_ARRAY, tn.getLine(), -1);
|
||||
//这里不求维数,因为函数形参为数组只是相当于一个指针
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user