Я создал простую программу lexer в Java, которая запрашивает у пользователя строку и отображает лексемы в этой строке. Однако, когда я ввожу значение, если в приглашение включены левые и/или правые круглые скобки, после левого или правого круглых скобок добавляется нулевой символ, который он идентифицирует программой как идентификатор.Java Simple Lexer Program
Кроме того, если я не включаю левую и правую круглые скобки в запрошенной пользователем строке, последний символ в строке не оценивается как лексема.
Вот мой код:
import javax.swing.JOptionPane;
public class Append
{
public static void main (String [] args)
{
String str = JOptionPane.showInputDialog("Enter string : ");
char [] arr = str.toCharArray();
JOptionPane.showMessageDialog(null,arr.length);
determineLexemes(arr);
}
public static void determineLexemes(char [] arr)
{
int j = 0;
String [] arrayString = new String [1000];
String strTwo = "";
System.out.println("Symbol Table");
System.out.println("Lexeme\t\tToken");
for(int i = 0; i < arr.length; i++)
{
if(arr[i] == '+')
{
System.out.println("+ \t\t ADD_OP");
}
if(arr[i] == '-')
{
System.out.println("- \t\t SUB_OP");
}
if(arr[i] == '*')
{
System.out.println("* \t\t MULT_OP");
}
if(arr[i] == '/')
{
System.out.println("/ \t\t DIV_OP");
}
if(arr[i] == '(')
{
System.out.println("(\t\t LEFT_PAREN");
}
if(arr[i] == ')')
{
System.out.println(") \t\t RIGHT_PAREN");
}
if(arr[i] == '=')
{
System.out.println("= \t\t EQUAL_OP");
}
if(Character.isLetter(arr[i]) || Character.isDigit(arr[i]))
{
strTwo += arr[i];
}
if(!Character.isLetter(arr[i]) && !Character.isDigit(arr[i]))
{
if(!(Character.isWhitespace(arr[i])))
{
arrayString[j] = strTwo;
System.out.println(arrayString[j] + "\t\t" + "IDENTIFIER");
strTwo = "";
j++;
}
}
}
}
}
Любая помощь по решению проблемы ценится.
У вас есть образец ввода? – MadProgrammer
Это может и должно быть отлажено как приложение командной строки. поэтому я удаляю тэг Swing. –
Один вход (a + b), который отображает все лексемы, но добавляет новую лексему между (и a). Другой вход - + b. Который отображает только + и a как лексемы (т.е. он пропускает букву b как лексему). – user3023315