Синтаксическая проблема с суммированием в переводчике Java-Python - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь реализовать переводчик Java-Python.Я использую flex для распознавания некоторых токенов Java.Я управлял целым числом с помощью этого регулярного выражения:

...
digit   [0-9]
number  (\+|\-)?{digit}+
...
%%
...
{number} {yylval.i= atoi (yytext);return(NUMBER);}
 "+"     {return (ADD);}

В синтаксическом анализаторе я определяю эту продукцию:

ArithmeticExpression
                : ExpressionStatement ADD ExpressionStatement
                | ExpressionStatement SUB ExpressionStatement
                | ExpressionStatement MULT ExpressionStatement
                | ExpressionStatement DIV ExpressionStatement
                | ExpressionStatement MOD ExpressionStatement
                ;

ExpressionStatement
                   : NUMBER
                   ;

, если я передаю ввод выражениям переводчика, подобным этому:

int a = 5 ++67;  (syntax error in java)

как мне справиться с этой ситуацией, чтобы переводчик распознал 5 ++ 67 как ошибку, а не как 5 + +67 (для ArithmeticExpression)?

1 Ответ

0 голосов
/ 08 сентября 2018

Как уже было сказано в комментариях, вам необходимо ввести токен ++.

Вы говорите, что вам не нужно обрабатывать унарные операторы.Тем не менее, вам все еще нужен токен.5 ++67 - это ошибка в Java именно потому, что ++ - это собственный токен.Если бы не было, 5 ++67 было бы эквивалентно 5 + +67.Поэтому, если вы хотите получить ту же ошибку, что и в Java, в этом случае вам также необходимо иметь токен ++ - даже если вы никогда его не используете.

...