현재 8 개의 키워드 (대소 문자 구분 안함)와 4 개의 산술 연산자로 기본 인터프리터를 만드는 작업을하고 있습니다.여러 arraylists 또는 stringtokenizer와 배열을 사용하여 자바로 인터프리터 작성
# (signals start of a comment line)
LET
INTEGER
STRING
PRINT
END
를 어쨌든 나는 현재 구문 분석 할 수있는 텍스트의 라인을 토큰 화하기 위해 노력하고있어이 언어 프로그램은 (정말 BASIC의 구문과 유사)과 같이 보일 것입니다. 이미 모든 텍스트 행을 ArrayList로 구문 분석하고 문자열을 토큰 화했습니다. 내 현재 문제는 StringTokenizer가 모든 문자열을 미리 토큰 화한다는 것입니다. (필자는 분리 문자로 공백 문자를 사용하고 있습니다.) 필자가 필요로하는 것은 항상 키워드 줄을 찾는 것입니다.이 키워드는 항상 코드 줄 시작 부분의 첫 단어입니다 , 그리고 어떤 이슈들은 그것을 바람직하지 않게 만든다; 나는 String.split()을 사용하는 것이 많은 도움이 될 것이라고 생각하지 않는다.
내가 할 계획은 인터프리터에게 첫 번째 토큰을 찾아 HashMap을 통해 적절한 클래스로 이동시키는 것입니다 (cf. 내 인터프리터 용 switch 문 사용에 대한 이전 질문 참조). Switch or if statements in writing an interpreter in java, 다른 회원이지도를 사용하여 키워드 토큰을 제거하고 실행하도록 제안했습니다. 변수를 보관하기 위해 두 번째 임시 ArrayList 또는 배열을 설정하는 것이 좋습니다. 나는 그것이 지나치게 복잡하게되기를 원하지 않거나 필요로하지 않는다.
미리 제안 해 주셔서 감사합니다.
public static void main (String[]args)
{
try
{
ArrayList<String> demo= new ArrayList <String>();
FileReader fr= new FileReader("hi.tpl");
BufferedReader reader= new BufferedReader(fr);
String line;
while ((line=reader.readLine()) !=null)//read file line by line
{
//Add to ArrayList
demo.add(line);
}
reader.close();
boolean checkEnd= demo.contains("END");//check if arraylist contains END statement
if(line=null && checkEnd== false)
{
System.out.println(" Unexpected end of file: no END statement");
System.exit(0);
}
ListIterator<String>arrayListIt=demo.listIterator();
while (arrayListIt.hasNext())
for (String file: demo)// begin interpreting the program file here
{
StringTokenizer st=new StringTokenizer(file);
while(st.hasMoreTokens())
{
int firstWord=file.indexOf();
String command = file;
if (firstSpace > 0)
{
command= file.substring(0, firstSpace);
}
TokenHandler tokens= tokens.get(command.toUpperCase());
if(tokens != null)
{
tokens.execute(file);
}
}
귀하의 질문이 명확하지 않습니다. –
@JBNizet 메소드에서 인수를 파싱하는 것을 고려해야하는지, 아니면 모든 인수를 구문 분석하여 스크립트 행을 보유하고있는 것과 별도의 ArrayList에 넣어야하는지 묻고있었습니다. – Luinithil