https://github.com/bhsh0112/compile
Science Score: 13.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (1.9%) to scientific vocabulary
Last synced: 10 months ago
·
JSON representation
Repository
Basic Info
- Host: GitHub
- Owner: bhsh0112
- Language: Java
- Default Branch: main
- Size: 198 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Created over 1 year ago
· Last pushed over 1 year ago
https://github.com/bhsh0112/compile/blob/main/
### 1
### 2
#### 2.1
tokentoken
#### 2.2 token
token
```java
String patternString =
"(\\b(main|const|int|char|break|continue|if|else|for|return|void|while)\\b)|" + //
"(\\b(getint|getchar|printf)\\b)|"+//
"(\\b[a-zA-Z_][a-zA-Z0-9_]*\\b)|" + //
"(\\b\\d+\\b)|" + //
"(\".*?\")|" +
"(//)|"+//
"(==|!=|<=|>=|<|>|&&|\\|\\||=|\\+|-|/\\*|\\*/|/\\*|\\*/|\\*|/|%|\\{|\\}|\\(|\\)|\\[|\\]|;|,|&|!|\\|)|" + //
"(\'(\\\\.|[^\\'])\')|"+
"(\\s+)"; //
```
token
```java
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(code);
```
token
```java
while (matcher.find()) {
if(matcher.group().equals("/*")){
zhuflag=true;
}
if(matcher.group().equals("*/")){
zhuflag=false;
continue;
}
if(matcher.group().equals("//")&&!zhuflag) break;
if (!matcher.group().matches("\\s+")&&!zhuflag) { //
tokens.add(matcher.group());
}
}
```
tokenize
#### 2.3
(**Ident**,**IntConst**,**StringConst**,**CharConst**)
```java
private static final Map words = new HashMap<>();
static {
words.put("main", "MAINTK");
words.put("const", "CONSTTK");
words.put("int", "INTTK");
words.put("char", "CHARTK");
words.put("break", "BREAKTK");
words.put("continue", "CONTINUETK");
words.put("if", "IFTK");
words.put("else", "ELSETK");
words.put("for", "FORTK");
words.put("getint", "GETINTTK");
words.put("getchar", "GETCHARTK");
words.put("printf", "PRINTFTK");
words.put("return", "RETURNTK");
words.put("void", "VOIDTK");
words.put(";", "SEMICN");
words.put("!", "NOT");
words.put("*", "MULT");
words.put(",", "COMMA");
words.put("&&", "AND");
words.put("||", "OR");
words.put("/", "DIV");
words.put("%", "MOD");
words.put("(", "LPARENT");
words.put(")", "RPARENT");
words.put("[", "LBRACK");
words.put("]", "RBRACK");
words.put("{", "LBRACE");
words.put("}", "RBRACE");
words.put("<", "LSS");
words.put("<=", "LEQ");
words.put(">", "GRE");
words.put(">=", "GEQ");
words.put("==", "EQL");
words.put("!=", "NEQ");
words.put("+", "PLUS");
words.put("-", "MINU");
words.put("=", "ASSIGN");
}
```
token
Ident
```java
private static boolean isIdentifier(String token) {
return token.matches("[a-zA-Z_][a-zA-Z0-9_]*");
}
```
#### 2.4
tokentoken
### 3
#### 3.1
#### 3.2
first
#### 3.3
- token
- first2token
-
#### 3.4
- tokenizetoken
- is+
-
- parser+
- is+
- addNode,insertNode,deletNodepostTraversal
dataStructureENode()NNode()TNodetoken
###
****
debugdebug
### 4
### 5 LLVMIR
#### 5.1
llvm**`llvm.ir.Module.main`**
llvm
```
--llvm
|----AddTreeNode.javaAddTree
|____ir
|----NameAllocator.javaValue
|----StrNameAllocator.javaprintf
|----Moudle.javallvm
|____value
|----AddExp.javaAddExp
|----BasicBlock.javaBlock
|----FormatString.javaprintf
|----Function.javamain
|----FunctionParam.java
|----GlobalArray.javaGlobalValue
|----GlobalValue.java
|----GlobalVar.javaGlobalValue
|----ImmediateValue.java
|----InitVal.java
|----Label.java
|----StringConst.java
|----Use.java
|----User.java
|----Value.javaValue
|----instLLVM
| |----AddInst.java
| |----AllocaInst.java
|
|____Type
|----Type.java
|----ReturnType.java
|____VarType.java
```
#### 5.2
- Module
- Global Value
-
-
- Functionmain
- BlockBasicBlock
-
MoudleBasicBlockBasicBlock
#### 5.3
modulemoduleArrayList
```java
public static ArrayList globalValues = new ArrayList<>();
public static ArrayList functions = new ArrayList<>();
```
##### 5.3.1
sysymoduleGlobalValue
##### 5.3.2
sysymoduleFunction
```java
ReturnType retType=new ReturnType(symbol.getASTNodeContent(parent, new int[] {0,0}));
String funcName=symbol.getASTNodeContent(parent, new int[] {1,0});
int paraNum=(parent.children.size()==5)?0:symbol.getASTNode(parent, new int[] {3}).children.size()/2+1;
ArrayList paraTypes=new ArrayList();
if (paraNum==0) paraTypes=null;
String[] paraNames=new String[paraNum];
for(int i=0;ibasicBlock->AddExp->xxInst
```
**`alloca+AddExp+store`**
##### 5.3.4 ()
**`load+AddExp+store`**
##### 5.3.5
######
**`getint/getchar:+call`**
**`printf:formatstring+AddExp{+putint}{+putch`}**
######
**`[+][AddExp+]call`**
##### 5.3.6
**`AddExp+return`**
#### 5.4 AddExp
AddExpAddExpAddExp
- AddTree
```java
public class AddTreeNode {
public String value; //
public List children; //
public Value exp;
public String type;
public AddTreeNode(String value) {
this.value = value;
this.children = new ArrayList<>();
}
//
public void addChild(AddTreeNode child) {
children.add(child);
}
}
```
1.valueexpvalue
2.valueexpLoadvalue
3.valuefuncexpcallvalue
4.valuetmppAddTree
intcharintimmcharimm
- AddTree
`flashType()`AddExptype
```java
public void flashType(AddTreeNode parent){
type=parent.type;
}
```
charImmintImmintImm
value
```java
AddTreeNode left,right;
left=parent.children.get(0);
right=parent.children.get(2);
if(left.type.equals("charImm")){
left.value=String.valueOf((int)(left.value.charAt(1)));
left.exp=new Value(left.value);
left.type="intImm";
}
if(right.type.equals("charImm")){
right.value=String.valueOf((int)(right.value.charAt(1)));
right.exp=new Value(right.value);
right.type="intImm";
}
System.out.println(left.value+" "+right.value);
if(left.type.equals("intImm")&&right.type.equals("intImm")){
switch(parent.children.get(1).value){
case "+":
value=new Value(String.valueOf(Integer.valueOf(left.value)+Integer.valueOf(right.value)));
parent.exp=value;
parent.value=value.name;
parent.type="intImm";
break;
//...
}
}
else{
switch(parent.children.get(1).value){
case "+":
value=basicBlock.createAddInst((left.type.equals("char"))?basicBlock.createZextInst(left.exp):left.exp, (right.type.equals("char"))?basicBlock.createZextInst(right.exp):right.exp);
parent.exp=value;
parent.type="int";
break;
//...
}
}
```
#### 5.5
##### 5.5.1
intcharintImmcharImm
```java
if(((VarType)tmpType).type.equals("int")&&tmpAddExp.type.equals("char")) from=createZextInst(from);
else if(((VarType)tmpType).type.equals("char")&&tmpAddExp.type.equals("int")) from=createTruncInst(from);
else if(((VarType)tmpType).type.equals("int")&&tmpAddExp.type.equals("charImm")){
from.name=String.valueOf((int)(from.name.charAt(1)));
}
```
##### 5.5.2
AddExpPrintfReturn
Owner
- Name: Shan Hao
- Login: bhsh0112
- Kind: user
- Company: 北京航空航天大学
- Repositories: 1
- Profile: https://github.com/bhsh0112
a students
GitHub Events
Total
- Push event: 26
- Create event: 4
Last Year
- Push event: 26
- Create event: 4