diff --git a/share/kumir2/kumiranalizer/messages.csv b/share/kumir2/kumiranalizer/messages.csv index 5193b4af9e50ba3041709bd4d1974dd9f3102a1d..cfdbdc4aebdbd0114a2dc6f6db2e437089ea5bdd 100644 --- a/share/kumir2/kumiranalizer/messages.csv +++ b/share/kumir2/kumiranalizer/messages.csv @@ -3,23 +3,24 @@ "No one 'case'";"Нет ни одного “при”";"";"";"";""; "Broken if statement";"Нет “все” для этой конструкции";"";"";"";""; "Can't %1 %2 %3";"Нельзя “%1 %2 %3”";"";"";"";""; -"Too many ':=' operators";"Много “:=” в одной строке";"";"";"";""; +"The name is used by other algorithm";"Имя занято другим алгоритмом";"";"";"";""; +"Assignment of non-returning algorithm";"У этого алгоритма нет значения";"";"";"";""; "Can't input string slice";"Нельзя ввести в вырезку";"";"";"";""; "Use of 'not' for non-boolean value";"“не” вне логического выражения";"";"";"";""; -"Extra statement";"Строка не на месте";"";"";"";""; +"Can't pass in-argument as in/out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";""; "Wrong table constant";"";"";"";"";""; "Unpaired ']'";"Нет парной “]”";"";"";"";""; "Return valus is not a string";"Возвращаемая величина не строка";"";"";"";""; "What to output?";"Что выводить?";"";"";"";""; "Garbage in algorithm";"Лишние строки алгоритма";"";"";"";""; "Assignment to array";"Присваивание массиву";"";"";"";""; -"Extra open brace";"";"";"";"";""; +"Garbage between if..then";"Мусор между “если”..”то”";"";"";"";""; "Program structure error";"Ошибка структуры программы";"";"";"";""; "No module name";"Нет имени исполнителя";"";"";"";""; "Too big real value";"Слишком большое вещественное значение";"";"";"";""; "No pairing 'begin module'";"Нет парной “исп”";"";"";"";""; -"No such module";"Нет такого исполнителя";"";"";"";""; -"No 'end' after 'then'";"Нет “все” после “то”";"";"";"";""; +"Can't run kumir2-bc to compile this module";"Не могу запустить компилятор для сборки этого испонителя";"";"";"";""; +"No condition after 'if'";"Нет условия для “если”";"";"";"";""; "The name is used by global variable";"Имя занято глобальной величиной";"";"";"";""; "Algorith out of module";"";"";"";"";""; "Extra variable group specifier: %1";"Лишнее описание группы величин";"";"";"";""; @@ -27,19 +28,20 @@ "Nothing between '(' and ')'";"Пусто между “(“ и “)”";"";"";"";""; "No operands";"Только операция";"";"";"";""; "File handle is not integer";"Ключ – не целое число";"";"";"";""; -"No colon after condition";"В конце нет “:”";"";"";"";""; +"Wrong E-real number";"Ошибка в E-записи числа";"";"";"";""; "Can't not %1";"Нельзя не %1";"";"";"";""; "No pairing ']'";"Нет парной “]”";"";"";"";""; "Can't integer:=charect";"Нельзя “цел := сим”";"";"";"";""; "Can't charect:=integer";"Нельзя “сим := цел”";"";"";"";""; "Can't boolean:=real";"Нельзя “лог := вещ”";"";"";"";""; -"The name is used by other algorithm";"Имя занято другим алгоритмом";"";"";"";""; +"Too many ':=' operators";"Много “:=” в одной строке";"";"";"";""; "Variable already declared";"Величина уже описана";"";"";"";""; "Can't boolean:=integer";"Нельзя “лог := цел”";"";"";"";""; "Algorhitms can't return array";"Нельзя вернуть таблицу";"";"";"";""; "'to' earler then 'from'";"“до” раньше чем “от”";"";"";"";""; "Error compiling this module";"Ошибка сборки этого исполнителя";"";"";"";""; "Extra operator";"Лишний оператор";"";"";"";""; +"No coma before declaration";"Нет запятой перед объявлением";"";"";"";""; "Can't input value of type %1";"Нельзя ввести значение типа %1";"";"";"";""; "File already specified";"";"";"";"";""; "Can't boolean:=%1";"";"";"";"";""; @@ -57,7 +59,7 @@ "Function in array bound";"Нельзя использовать вызов алгоритма в границе";"";"";"";""; "Indeces was specified before";"Повторное указание индексов";"";"";"";""; "From-value not specified";"Нет значения после “от”";"";"";"";""; -"No variables declared after '%1'";"Пусто после “%1”";"";"";"";""; +"Right array bound is not integer";"Правая граница таблицы не целая";"";"";"";""; "Too many 'not'";"Много “не”";"";"";"";""; "No pairing ')'";"Нет парной “)”";"";"";"";""; "Table constant element of variant type";"";"";"";"";""; @@ -76,14 +78,14 @@ "Variable name is empty";"Где имя величины?";"";"";"";""; "Assignment to in- argument";"Нельзя присвоить аргументу";"";"";"";""; "No coma before type";"Нет запятой перед объявлением";"";"";"";""; -"Right array bound is not integer";"Правая граница таблицы не целая";"";"";"";""; +"No variables declared after '%1'";"Пусто после “%1”";"";"";"";""; "No arguments";"Нет аргументов";"";"";"";""; "Extra 'fi'";"Что - “все”?";"";"";"";""; "Type not declared before";"Не указан тип";"";"";"";""; "Can't input algorithm in- argument";"Нельзя ввести в аргумент";"";"";"";""; "Then-value not specified";"Нет значения после “до”";"";"";"";""; "Extra 'module'";"Для “исп” нет “кон_исп”";"";"";"";""; -"No 'loop' before 'times'";"Перед “раз” нет “нц”";"";"";"";""; +"Array dimension must not be > 3";"Таблицы не бывают размерности > 3";"";"";"";""; "Extra ','";"Лишняя запятая";"";"";"";""; "Garbage after 'switch' statement";"Мусор после “выбор”";"";"";"";""; "Can't input constant";"";"";"";"";""; @@ -98,7 +100,7 @@ "No 'begin' after header";"После “алг” нет “нач”";"";"";"";""; "This algorhitm is broken";"Алгоритм с ошибкой";"";"";"";""; "No operand before non-unary operator";"";"";"";"";""; -"Can't run kumir2-bc to compile this module";"Не могу запустить компилятор для сборки этого испонителя";"";"";"";""; +"No such module";"Нет такого исполнителя";"";"";"";""; "Extra 'switch'";"Нет ”все” после “выбор”";"";"";"";""; "Error contains unpaired quote";"Непарная кавычка";"";"";"";""; "Constant type mismatch";"Несоответствие типа константы";"";"";"";""; @@ -112,14 +114,14 @@ "Garbage at the end of statement";"Мусор в конце выражения";"";"";"";""; "No 'then' after 'if'";"Где “то” после условия?";"";"";"";""; "Assignment to complex expression";"Нельзя присвоить выражению";"";"";"";""; -"Can't output value of type %1";"Нельзя вывести значение типа %1";"";"";"";""; +"'end' instead of 'endloop'";"“кон” вместо “кц”";"";"";"";""; "Can't real:=string";"Нельзя “вещ := лит”";"";"";"";""; -"Wrong hex constant";"Плохая 16-ричная константа";"";"";"";""; +"Constant instead of name";"Здесь должно быть имя";"";"";"";""; "':=' or '=' ?";"“:=” или “=” ?";"";"";"";""; "Unpaired quote";"Непарная кавычка";"";"";"";""; "Array name not specified before '['";"Перед “[“ должно быть имя таблицы";"";"";"";""; "No algorithm name";"Не указано имя алгоритма";"";"";"";""; -"Can't input complex expression";"Нельзя ввести в выражение";"";"";"";""; +"Algorhitm not found";"Нет такого алгоритма";"";"";"";""; "Not a constant value";"Это не константа";"";"";"";""; "Can't input function";"Нельзя ввести в алгоритм";"";"";"";""; "Algorithm out of module";"Алгоритм вне исполнителя";"";"";"";""; @@ -129,10 +131,10 @@ "Extra docstring";"Здесь не должно быть строк описания";"";"";"";""; "Extra brackets for algorithm without arguments";"Нет аргументов – не нужны скобки";"";"";"";""; "Assignment to function";"Нельзя присвоить алгоритму";"";"";"";""; -"Constant instead of name";"Здесь должно быть имя";"";"";"";""; -"Unmatched array dimensions";"Несоответствие размерностей таблиц";"";"";"";""; +"Wrong hex constant";"Плохая 16-ричная константа";"";"";"";""; +"Index is not integer";"Индекс – не целое число";"";"";"";""; "Operator in name";"Имя содержит оператор";"";"";"";""; -"Times value not specified";"Сколько раз?";"";"";"";""; +"Garbage afrer module name";"Мусор после имени исполнителя";"";"";"";""; "Table dimension > 3";"";"";"";"";""; "No for-loop variable";"Нет величины цикла";"";"";"";""; "Left array bound is not integer";"Левая граница – не целое";"";"";"";""; @@ -141,8 +143,8 @@ "Array dimension mismatch";"Несоответствие размерностей таблиц";"";"";"";""; "Initial value is empty";"Начальное значение не задано";"";"";"";""; "'%1' in algorithm";"“%1” внутри алгоритма";"";"";"";""; -"Can't pass in-argument as in/out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";""; -"Garbage between if..then";"Мусор между “если”..”то”";"";"";"";""; +"Extra statement";"Строка не на месте";"";"";"";""; +"Extra open brace";"";"";"";"";""; "No such file";"Нет такого исполнителя рядом с программой";"";"";"";""; "No loop 'to' value";"Нет “до” после “от”";"";"";"";""; "Extra format";"";"";"";"";""; @@ -150,15 +152,15 @@ "Extra '['";"Лишняя “[“";"";"";"";""; "Constant can not be a name";"Константа – это не имя";"";"";"";""; "It is a garbage";"Это лишнее";"";"";"";""; -"Not integer for-loop variable";"Величина не целая";"";"";"";""; -"No condition after 'if'";"Нет условия для “если”";"";"";"";""; +"Extra format parameter";"Лишний параметр вывода";"";"";"";""; +"No 'end' after 'then'";"Нет “все” после “то”";"";"";"";""; "Slice of string array, but not string";"Вырезка не из строки, а из таблицы";"";"";"";""; "Void argument";"Пустой аргумент";"";"";"";""; "What to input?";"Куда вводить?";"";"";"";""; -"Algorhitm not found";"Нет такого алгоритма";"";"";"";""; +"Can't input complex expression";"Нельзя ввести в выражение";"";"";"";""; "Left array bound not specified";"Не указана левая граница таблицы";"";"";"";""; "Array input must not be in a list";"";"";"";"";""; -"Index is not integer";"Индекс – не целое число";"";"";"";""; +"Unmatched array dimensions";"Несоответствие размерностей таблиц";"";"";"";""; "Unpaired ')'";"Непарная скобка";"";"";"";""; "Extra variable group out-specifier";"Лишний “рез”";"";"";"";""; "No 'loop' before 'while'";"Перед “пока” нет “нц”";"";"";"";""; @@ -176,14 +178,13 @@ "Extra 'else'";"Лишнее “иначе”";"";"";"";""; "Extra 'begin'";"Нет “кон” после “нач”";"";"";"";""; "Extra variable group inout-specifier";"Лишний “аргрез”";"";"";"";""; -"Can't -%1";"Нельзя -%1";"";"";"";""; "Extra indeces in slice";"Лишние индексы в вырезке";"";"";"";""; "Can't integer:=%1";"";"";"";"";""; -"Unpaired '['";"Не парная “[“";"";"";"";""; +"No pairing '('";"Нет парной “(“";"";"";"";""; "Can't pass this expression as in/out-argumeny";"Не величина в аргрез-параметре";"";"";"";""; "Must be a scalar constant";"";"";"";"";""; "What to input from file?";"Куда вводить из файла?";"";"";"";""; -"'end_module' instead of 'end'";"“кон_исп” вместо “кон”";"";"";"";""; +"No colon after condition";"В конце нет “:”";"";"";"";""; "Extra 'end'";"Лишний “кон”";"";"";"";""; "Algorhitm header in algorhitm body";"Вложенное описание алгоритма";"";"";"";""; "Not a simple index";"Индекс – не число";"";"";"";""; @@ -191,26 +192,26 @@ "Name contains quotation symbol";"Имя содержит кавычку";"";"";"";""; "Not enought algorithm arguments";"Мало аргументов";"";"";"";""; "Can't charect:=boolean";"Нельзя “сим := лог”";"";"";"";""; -"Array dimension must not be > 3";"Таблицы не бывают размерности > 3";"";"";"";""; -"Wrong E-real number";"Ошибка в E-записи числа";"";"";"";""; +"No 'loop' before 'times'";"Перед “раз” нет “нц”";"";"";"";""; +"No 'loop' before 'for'";"Перед “для” нет “нц”";"";"";"";""; "Extra 'if'";"Нет “то..все” после “если”";"";"";"";""; "Can't %1:=real";"";"";"";"";""; "No condition between 'case' and colon";"Нет условия между “при” и “:”";"";"";"";""; "No then before else";"Нет “то” перед “иначе”";"";"";"";""; "Assignment of array";"Нельзя присваивать таблицы";"";"";"";""; "Extra 'not'";"Лишнее “не”";"";"";"";""; -"'end' instead of 'endloop'";"“кон” вместо “кц”";"";"";"";""; +"Can't output value of type %1";"Нельзя вывести значение типа %1";"";"";"";""; "Keyword in name";"Ключевое слово в имени";"";"";"";""; "Can't input an array";"";"";"";"";""; "What to output to file?";"Что выводить в файл?";"";"";"";""; "No 'case' after 'switch'";"Нет “при:” после “выбор”";"";"";"";""; "Can't %1:=charect";"";"";"";"";""; "= instead of :=";"";"";"";"";""; -"Garbage afrer module name";"Мусор после имени исполнителя";"";"";"";""; +"Times value not specified";"Сколько раз?";"";"";"";""; "Array element in array bound";"Элемент таблицы в границе";"";"";"";""; "Can't string:=%1";"";"";"";"";""; "First unnamed algorithm should not return anything";"Алгоритм без имени ничего не возвращает";"";"";"";""; -"Extra format parameter";"Лишний параметр вывода";"";"";"";""; +"Not integer for-loop variable";"Величина не целая";"";"";"";""; "No left array bound";"Нет левой границы таблицы";"";"";"";""; "Integer constant too big";"Слишком большое целое число";"";"";"";""; "Literal can't be part of name";"Константа в имени";"";"";"";""; @@ -221,12 +222,11 @@ "Can't string:=real";"Нельзя “лит := вещ”";"";"";"";""; "No 'from'..'to'.. after variable";"Нет “от”..”до”.. после величины";"";"";"";""; "Forgotten operator after bracket";"Перед выражением пропущен оператор";"";"";"";""; -"No 'loop' before 'for'";"Перед “для” нет “нц”";"";"";"";""; +"Can't -%1";"Нельзя -%1";"";"";"";""; "Can't pass in-argument as out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";""; "Condition after '%1' not boolean";"Условие после “%1” не логическое";"";"";"";""; "Can't integer:=real";"Нельзя “цел := вещ”";"";"";"";""; "Array required here";"Индексы не нужны";"";"";"";""; -"Garbage between alg..begin";"Мусор между “алг”..”нач”";"";"";"";""; "No condition after 'end if'";"Нет условия для “кц при”";"";"";"";""; "Assignment of void";"Нельзя присвоить пустое значение";"";"";"";""; "Loop type not specified";"Не указан тип цикла";"";"";"";""; @@ -245,6 +245,7 @@ "Can't open module file";"Не могу открыть файл исполнителя";"";"";"";""; "Algorhitm not implemented";"Алгоритм не реализован";"";"";"";""; "Can't string:=boolean";"Нельзя “лит := лог”";"";"";"";""; +"'end_module' instead of 'end'";"“кон_исп” вместо “кон”";"";"";"";""; "No 'from' before 'to'";"Нет “от”.. перед “до”";"";"";"";""; "Name starts with digit";"Имя не может начинаться с цифры";"";"";"";""; "Extra indeces";"Лишние индексы";"";"";"";""; @@ -276,8 +277,8 @@ "Garbage between switch..case";"Мусор между “выбор”..”при”";"";"";"";""; "No expressions after '%1'";"Нет величин после “%1”";"";"";"";""; "Not integer times-value";"Величина не целая";"";"";"";""; -"No pairing '('";"Нет парной “(“";"";"";"";""; -"Assignment of non-returning algorithm";"У этого алгоритма нет значения";"";"";"";""; +"Unpaired '['";"Не парная “[“";"";"";"";""; +"Garbage between alg..begin";"Мусор между “алг”..”нач”";"";"";"";""; "Bad symbol in name";"Имя содержит недопустимый символ";"";"";"";""; "What to assign?";"Что назначать?";"";"";"";""; "No condition after 'loop while'";"Нет условия после “нц пока”";"";"";"";""; diff --git a/src/plugins/kumiranalizer/syntaxanalizer.cpp b/src/plugins/kumiranalizer/syntaxanalizer.cpp index fa60e680883d3d412eb73ca045d27645b4698c67..2867eaf4d57efdcca871f8f1c213e253dd205516 100644 --- a/src/plugins/kumiranalizer/syntaxanalizer.cpp +++ b/src/plugins/kumiranalizer/syntaxanalizer.cpp @@ -1920,7 +1920,6 @@ QList SyntaxAnalizerPrivate::parseVariables(int statementIndex, for ( int curPos=0; curPostype==LxSecIn) { @@ -1937,6 +1936,17 @@ QList SyntaxAnalizerPrivate::parseVariables(int statementIndex, } else if ( ( par == type ) || ( par == tn ) ) { + // Check if no coma before not first declaration + if ( curPos>0 + && group.lexems[curPos]->type!=LxOperComa + && group.lexems[curPos-1]->type!=LxOperComa + && group.lexems[curPos-1]->type!=LxOperSemicolon + ) + { + group.lexems[curPos]->error = _("No coma before declaration"); + return result; + } + // Pазбираемся с типом переменных if (group.lexems[curPos]->type==LxNameClass) { AST::VariableBaseType bt = lexer->baseTypeByClassName(group.lexems[curPos]->data);