add function

This commit is contained in:
XudongXie 2024-08-22 22:51:40 +08:00
parent 0bcc3c21b7
commit ff0b115ecc
4 changed files with 79 additions and 15 deletions

View File

@ -4,9 +4,10 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="revise">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add parser function">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/Parser/AST/CreateTable/TableNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/CreateTable/TableNode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/Parser/AST/ASTNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/ASTNode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/Parser/AST/CreateTable/ColumnNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/CreateTable/ColumnNode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/Parser/OracleParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/OracleParser.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -18,6 +19,7 @@
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
<option value="Interface" />
</list>
</option>
</component>
@ -39,15 +41,15 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
"last_opened_file_path": "F:/oracle2opengauss/examples/sqlTranslate",
"settings.editor.selected.configurable": "preferences.pluginManager"
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;F:/oracle2opengauss/examples/sqlTranslate&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;
}
}]]></component>
}</component>
<component name="RunManager" selected="应用程序.Main">
<configuration name="App" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="org.example.App" />
@ -165,7 +167,14 @@
<option name="project" value="LOCAL" />
<updated>1724165047441</updated>
</task>
<option name="localTasksCounter" value="10" />
<task id="LOCAL-00010" summary="add parser function">
<created>1724166047929</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1724166047929</updated>
</task>
<option name="localTasksCounter" value="11" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -186,6 +195,7 @@
<MESSAGE value="add AST node" />
<MESSAGE value="add functions" />
<MESSAGE value="revise" />
<option name="LAST_COMMIT_MESSAGE" value="revise" />
<MESSAGE value="add parser function" />
<option name="LAST_COMMIT_MESSAGE" value="add parser function" />
</component>
</project>

View File

@ -10,6 +10,9 @@ public abstract class ASTNode {
private ASTNode parent;
private List<ASTNode> children = new ArrayList<>();
public ASTNode() {
}
public ASTNode(List<Token> tokens) {
this.tokens = tokens;
}

View File

@ -6,6 +6,12 @@ import Parser.AST.ASTNode;
import java.util.List;
public class ColumnNode extends ASTNode {
private Token name;
private Token type;
private Token constraint;
public ColumnNode() {
super();
}
public ColumnNode(ASTNode node)
{
super(node);
@ -24,4 +30,28 @@ public class ColumnNode extends ASTNode {
}
}
public Token getName() {
return name;
}
public void setName(Token name) {
this.name = name;
}
public Token getType() {
return type;
}
public void setType(Token type) {
this.type = type;
}
public Token getConstraint() {
return constraint;
}
public void setConstraint(Token constraint) {
this.constraint = constraint;
}
}

View File

@ -4,6 +4,7 @@ import Lexer.OracleLexer;
import Lexer.Token;
import Parser.AST.ASTNode;
import Exception.ParseFailedException;
import Parser.AST.CreateTable.ColumnNode;
import Parser.AST.CreateTable.CreateTabNode;
import Parser.AST.CreateTable.TableNode;
import Parser.AST.CreateTable.TableTypeNode;
@ -77,11 +78,31 @@ public class OracleParser {
currentNode = child;
}
else if (lexer.getTokens().get(i).hasType(Token.TokenType.IDENTIFIER)) {
// Token.TokenType.IDENTIFIER ... , -> column node
tokens.clear();
ColumnNode child = new ColumnNode();
child.setName();
tokens.add();
for (int j = i + 1; j < lexer.getTokens().size(); j++) {
if (j == i + 1) {
}
tokens.add(lexer.getTokens().get(j));
if ((lexer.getTokens().get(j).hasType(Token.TokenType.SYMBOL) && lexer.getTokens().get(j).getValue().equals(",")) ||
(lexer.getTokens().get(j).hasType(Token.TokenType.SYMBOL) && lexer.getTokens().get(j).getValue().equals(")")) ) {
i = j;
break;
}
}
child.setTokens(tokens);
currentNode.addChild(child);
currentNode = child;
}
else if (lexer.getTokens().get(i).hasType(Token.TokenType.KEYWORD) && lexer.getTokens().get(i).getValue().equalsIgnoreCase("CONSTRAINT")) {
// Table constraint
tokens.clear();
tokens.add(lexer.getTokens().get(i));
for (int j = i + 1; j < lexer.getTokens().size(); j++) {
// TODO: Token.TokenType.IDENTIFIER ... , -> column node
}
}
else {
throw new ParseFailedException("Parse failed!");