简单的MATLAB词法分析器程序

时间:2015-12-29 04:40:16

标签: matlab identifier lexical-analysis

我用MATLAB代码创建了一个简单的词法分析器程序,当用户键入一个字符串时,该字符串中的词法分类。但是,当我在命令窗口中输入字符串时,标识符不会显示。

代码如下:

function determineLexemes()
   j = 0;
   prompt = 'Enter string : ';
   str = input(prompt);
   arr = char(str);
   strTwo = '';
   display('Symbol Table');
   fprintf('Lexeme \t\t Token \n');
   k = length(arr);
   for i = 1: k
     if(arr(i) == '+')
       fprintf('+ \t\t ADD_OP \n');
     end
    if(arr(i) == '-')
       fprintf('- \t\t SUB_OP \n');
    end
    if(arr(i) == '*')
       fprintf('* \t\t MULT_OP \n');
    end
    if(arr(i) == '/')
       fprintf('/ \t\t DIV_OP \n');
    end
   if(arr(i) == '(')
      fprintf('( \t\t LEFT_PAREN \n');
   end
   if(arr(i) == ')')
      fprintf(') \t\t RIGHT_PAREN \n');
   end
   if(arr(i) == '=')
      fprintf('= \t\t EQUAL_OP \n');
   end


   x = str2num(arr(i));
   y = isletter(arr(i));


   if(y || (isempty(x) ==0))
      strTwo = strcat(strTwo,arr(i));
   end


   if(~ischar(arr(i)) && ~isnumeric(arr(i)))
      if(~isspace(arr(i)) && ~isempty(strTwo))
           m(j) = strTwo;

           if(isNumeric(strTwo(1)) && regexp('.*[a-zA-]+.*'))
               disp(strcat('Error. Potential variable (', strTwo, ') whose name starts with digit found'));
               strTwo = '';
               j = j + 1;
           end
           if(~(isNumeric(strTwo(1) && regexp('.*[a-zA-]+.*'))))
               disp(strcat(m(j), ('\t\t IDENTIFIER')));
               strTwo = '';
               j = j + 1;   
           end 
       end
    end 
 end
end

当向用户提示输入'(2a + b)'时,预期输出如下:

enter image description here

但是,输出当前不识别标识符(即本例中的2a和b)。

对此问题的任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我尝试将代码所需的更改保持在最低限度,但是存在很多错误(甚至包括isNumeric而不是isnumeric或{{1}缺少参数功能)。 希望你对此感到满意。

regex