Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kumir2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
2
Issues
2
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
kumir
kumir2
Commits
88d77bd2
Commit
88d77bd2
authored
Jan 21, 2013
by
Victor Yacovlev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented additional brackes/sq.brackes/braces corretness checking at
compile time
parent
45b2445a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
108 additions
and
43 deletions
+108
-43
share/kumir2/kumiranalizer/messages.csv
share/kumir2/kumiranalizer/messages.csv
+47
-43
src/plugins/kumiranalizer/syntaxanalizer.cpp
src/plugins/kumiranalizer/syntaxanalizer.cpp
+61
-0
No files found.
share/kumir2/kumiranalizer/messages.csv
View file @
88d77bd2
...
...
@@ -3,24 +3,23 @@
"No one 'case'";"Нет ни одного “при”";"";"";"";"";
"Broken if statement";"Нет “все” для этой конструкции";"";"";"";"";
"Can't %1 %2 %3";"Нельзя “%1 %2 %3”";"";"";"";"";
"The name is used by other algorithm";"Имя занято другим алгоритмом";"";"";"";"";
"Assignment of non-returning algorithm";"У этого алгоритма нет значения";"";"";"";"";
"Too many ':=' operators";"Много “:=” в одной строке";"";"";"";"";
"Can't input string slice";"Нельзя ввести в вырезку";"";"";"";"";
"Use of 'not' for non-boolean value";"“не” вне логического выражения";"";"";"";"";
"
Can't pass in-argument as in/out-argument";"Нельзя арг передать в рез или аргрез
";"";"";"";"";
"
Extra statement";"Строка не на месте
";"";"";"";"";
"Wrong table constant";"";"";"";"";"";
"Unpaired ']'";"Нет парной “]”";"";"";"";"";
"Return valus is not a string";"Возвращаемая величина не строка";"";"";"";"";
"What to output?";"Что выводить?";"";"";"";"";
"Garbage in algorithm";"Лишние строки алгоритма";"";"";"";"";
"Assignment to array";"Присваивание массиву";"";"";"";"";
"
Garbage between if..then";"Мусор между “если”..”то”
";"";"";"";"";
"
Extra open brace";"
";"";"";"";"";
"Program structure error";"Ошибка структуры программы";"";"";"";"";
"No module name";"Нет имени исполнителя";"";"";"";"";
"
Too big real value";"Слишком большое вещественное значение
";"";"";"";"";
"
Array dimension mismatch";"Несоответствие размерностей таблиц
";"";"";"";"";
"No pairing 'begin module'";"Нет парной “исп”";"";"";"";"";
"
Can't run kumir2-bc to compile this module";"Не могу запустить компилятор для сборки этого испо
нителя";"";"";"";"";
"No
condition after 'if'";"Нет условия для “если
”";"";"";"";"";
"
No such module";"Нет такого испол
нителя";"";"";"";"";
"No
'end' after 'then'";"Нет “все” после “то
”";"";"";"";"";
"The name is used by global variable";"Имя занято глобальной величиной";"";"";"";"";
"Algorith out of module";"";"";"";"";"";
"Extra variable group specifier: %1";"Лишнее описание группы величин";"";"";"";"";
...
...
@@ -35,7 +34,7 @@
"Can't charect:=integer";"Нельзя “сим := цел”";"";"";"";"";
"Can't boolean:=real";"Нельзя “лог := вещ”";"";"";"";"";
"No operator before (";"";"";"";"";"";
"T
oo many ':=' operators";"Много “:=” в одной строке
";"";"";"";"";
"T
he name is used by other algorithm";"Имя занято другим алгоритмом
";"";"";"";"";
"Variable already declared";"Величина уже описана";"";"";"";"";
"Can't boolean:=integer";"Нельзя “лог := цел”";"";"";"";"";
"Algorhitms can't return array";"Нельзя вернуть таблицу";"";"";"";"";
...
...
@@ -61,7 +60,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";"";"";"";"";"";
...
...
@@ -70,7 +69,7 @@
"Extra 'loop'";"Нет парного “кц”";"";"";"";"";
"Can't %1:=string";"";"";"";"";"";
"Recursive declaration of bound";"Рекурсивное объявление границ";"";"";"";"";
"
No operator before [";"
";"";"";"";"";
"
Garbage after %1";"Мусор после %1
";"";"";"";"";
"No step-value";"Нет значения после “шаг”";"";"";"";"";
"Name not declared";"Имя не объявлено";"";"";"";"";
"No paired 'end module'";"Нет парного “кон_исп”";"";"";"";"";
...
...
@@ -80,7 +79,7 @@
"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";"Нет аргументов";"";"";"";"";
"No name before [";"Перед [ должно быть имя";"";"";"";"";
"Extra 'fi'";"Что - “все”?";"";"";"";"";
...
...
@@ -88,7 +87,7 @@
"Can't input algorithm in- argument";"Нельзя ввести в аргумент";"";"";"";"";
"Then-value not specified";"Нет значения после “до”";"";"";"";"";
"Extra 'module'";"Для “исп” нет “кон_исп”";"";"";"";"";
"
Array dimension must not be > 3";"Таблицы не бывают размерности > 3
";"";"";"";"";
"
No 'loop' before 'times'";"Перед “раз” нет “нц”
";"";"";"";"";
"Extra ','";"Лишняя запятая";"";"";"";"";
"Garbage after 'switch' statement";"Мусор после “выбор”";"";"";"";"";
"Can't input constant";"";"";"";"";"";
...
...
@@ -98,15 +97,15 @@
"Must be Kumir program file name";"Нет имени файла исполнителя";"";"";"";"";
"Not integer to-value";"Величина не целая";"";"";"";"";
"Input format must be a string";"";"";"";"";"";
"Unpaired ')'";"Непарная скобка";"";"";"";"";
"Must be a file name or empty string";"Должно быть имя файла или пустая строка";"";"";"";"";
"Can't %1:=%2";"Нельзя “%1 := %2”";"";"";"";"";
"No 'begin' after header";"После “алг” нет “нач”";"";"";"";"";
"This algorhitm is broken";"Алгоритм с ошибкой";"";"";"";"";
"No operand before non-unary operator";"";"";"";"";"";
"
No such module";"Нет такого испол
нителя";"";"";"";"";
"
Can't run kumir2-bc to compile this module";"Не могу запустить компилятор для сборки этого испо
нителя";"";"";"";"";
"Extra 'switch'";"Нет ”все” после “выбор”";"";"";"";"";
"Error contains unpaired quote";"Непарная кавычка";"";"";"";"";
"Too big real value";"Слишком большое вещественное значение";"";"";"";"";
"Constant type mismatch";"Несоответствие типа константы";"";"";"";"";
"':=' should not be here";"Здесь не должно быть “:=”";"";"";"";"";
"Unpaired '('";"Нет парной “)”";"";"";"";"";
...
...
@@ -118,18 +117,18 @@
"Garbage at the end of statement";"Мусор в конце выражения";"";"";"";"";
"No 'then' after 'if'";"Где “то” после условия?";"";"";"";"";
"Assignment to complex expression";"Нельзя присвоить выражению";"";"";"";"";
"
'end' instead of 'endloop'";"“кон” вместо “кц”
";"";"";"";"";
"
Can't output value of type %1";"Нельзя вывести значение типа %1
";"";"";"";"";
"Can't real:=string";"Нельзя “вещ := лит”";"";"";"";"";
"
Constant instead of name";"Здесь должно быть имя
";"";"";"";"";
"
Wrong hex constant";"Плохая 16-ричная константа
";"";"";"";"";
"':=' or '=' ?";"“:=” или “=” ?";"";"";"";"";
"Unpaired quote";"Непарная кавычка";"";"";"";"";
"Array name not specified before '['";"Перед “[“ должно быть имя таблицы";"";"";"";"";
"No algorithm name";"Не указано имя алгоритма";"";"";"";"";
"
Algorhitm not found";"Нет такого алгоритма
";"";"";"";"";
"
Can't input complex expression";"Нельзя ввести в выражение
";"";"";"";"";
"Not a constant value";"Это не константа";"";"";"";"";
"Can't input function";"Нельзя ввести в алгоритм";"";"";"";"";
"Algorithm out of module";"Алгоритм вне исполнителя";"";"";"";"";
"
Garbage after %1";"Мусор после %1
";"";"";"";"";
"
No operator before [";"
";"";"";"";"";
"Can't integer:=boolean";"Нельзя “цел := лог”";"";"";"";"";
"Extra type";"Лишнее объявление типа";"";"";"";"";
"Return value is not indexable";"У знач не может быть индексов";"";"";"";"";
...
...
@@ -137,19 +136,20 @@
"Extra docstring";"Здесь не должно быть строк описания";"";"";"";"";
"Extra brackets for algorithm without arguments";"Нет аргументов – не нужны скобки";"";"";"";"";
"Assignment to function";"Нельзя присвоить алгоритму";"";"";"";"";
"
Wrong hex constant";"Плохая 16-ричная константа
";"";"";"";"";
"
Index is not integer";"Индекс – не целое число
";"";"";"";"";
"
Constant instead of name";"Здесь должно быть имя
";"";"";"";"";
"
Unmatched array dimensions";"Несоответствие размерностей таблиц
";"";"";"";"";
"Operator in name";"Имя содержит оператор";"";"";"";"";
"Garbage afrer module name";"Мусор после имени исполнителя";"";"";"";"";
"Times value not specified";"Сколько раз?";"";"";"";"";
"Table dimension > 3";"";"";"";"";"";
"No for-loop variable";"Нет величины цикла";"";"";"";"";
"Left array bound is not integer";"Левая граница – не целое";"";"";"";"";
"No condition after 'case'";"Нет условия после “при”";"";"";"";"";
"Incompatible types";"Плохой тип параметра";"";"";"";"";
"
Array dimension mismatch";"Несоответствие размерностей таблиц
";"";"";"";"";
"
'end_module' instead of 'end'";"“кон_исп” вместо “кон”
";"";"";"";"";
"Initial value is empty";"Начальное значение не задано";"";"";"";"";
"'%1' in algorithm";"“%1” внутри алгоритма";"";"";"";"";
"
Extra statement";"Строка не на месте
";"";"";"";"";
"
Extra open brace";"
";"";"";"";"";
"
Can't pass in-argument as in/out-argument";"Нельзя арг передать в рез или аргрез
";"";"";"";"";
"
Garbage between if..then";"Мусор между “если”..”то”
";"";"";"";"";
"No such file";"Нет такого исполнителя рядом с программой";"";"";"";"";
"No loop 'to' value";"Нет “до” после “от”";"";"";"";"";
"Extra format";"";"";"";"";"";
...
...
@@ -157,16 +157,16 @@
"Extra '['";"Лишняя “[“";"";"";"";"";
"Constant can not be a name";"Константа – это не имя";"";"";"";"";
"It is a garbage";"Это лишнее";"";"";"";"";
"
Extra format parameter";"Лишний параметр вывода
";"";"";"";"";
"No
'end' after 'then'";"Нет “все” после “то
”";"";"";"";"";
"
Not integer for-loop variable";"Величина не целая
";"";"";"";"";
"No
condition after 'if'";"Нет условия для “если
”";"";"";"";"";
"Slice of string array, but not string";"Вырезка не из строки, а из таблицы";"";"";"";"";
"Void argument";"Пустой аргумент";"";"";"";"";
"What to input?";"Куда вводить?";"";"";"";"";
"
Can't input complex expression";"Нельзя ввести в выражение
";"";"";"";"";
"
Algorhitm not found";"Нет такого алгоритма
";"";"";"";"";
"Left array bound not specified";"Не указана левая граница таблицы";"";"";"";"";
"Array input must not be in a list";"";"";"";"";"";
"
Unmatched array dimensions";"Несоответствие размерностей таблиц
";"";"";"";"";
"
Table dimension > 3";"
";"";"";"";"";
"
Index is not integer";"Индекс – не целое число
";"";"";"";"";
"
Unpaired ')'";"Непарная скобка
";"";"";"";"";
"Extra variable group out-specifier";"Лишний “рез”";"";"";"";"";
"No 'loop' before 'while'";"Перед “пока” нет “нц”";"";"";"";"";
"Extra 'case'";"“при” не на месте";"";"";"";"";
...
...
@@ -182,45 +182,48 @@
"Extra algorithm arguments";"Лишние аргументы";"";"";"";"";
"Extra 'else'";"Лишнее “иначе”";"";"";"";"";
"Extra 'begin'";"Нет “кон” после “нач”";"";"";"";"";
"Unpaired }";"Непарная }";"";"";"";"";
"Extra variable group inout-specifier";"Лишний “аргрез”";"";"";"";"";
"
Can't -%1";"Нельзя -%1
";"";"";"";"";
"
Unpaired {";"Непарная {
";"";"";"";"";
"Extra indeces in slice";"Лишние индексы в вырезке";"";"";"";"";
"Can't integer:=%1";"";"";"";"";"";
"
No pairing '('";"Нет парной “(
“";"";"";"";"";
"
Unpaired '['";"Не парная “[
“";"";"";"";"";
"Can't pass this expression as in/out-argumeny";"Не величина в аргрез-параметре";"";"";"";"";
"Unpaired ]";"Непарная ]";"";"";"";"";
"Must be a scalar constant";"";"";"";"";"";
"What to input from file?";"Куда вводить из файла?";"";"";"";"";
"Unpaired [";"";"";"";"";"";
"Unpaired [";"
Непарная [
";"";"";"";"";
"Extra )";"Лишняя )";"";"";"";"";
"
'end_module' instead of 'end'";"“кон_исп” вместо “кон”
";"";"";"";"";
"
Wrong E-real number";"Ошибка в E-записи числа
";"";"";"";"";
"Extra 'end'";"Лишний “кон”";"";"";"";"";
"Unpaired (";"";"";"";"";"";
"
Algorhitm header in algorhitm body";"Вложенное описание алгоритма
";"";"";"";"";
"Unpaired (";"
Непарная (
";"";"";"";"";
"
Unpaired )";"Непарная )
";"";"";"";"";
"Not a simple index";"Индекс – не число";"";"";"";"";
"Module in algorhitm body";"“исп” внутри алгоритма";"";"";"";"";
"Name contains quotation symbol";"Имя содержит кавычку";"";"";"";"";
"Not enought algorithm arguments";"Мало аргументов";"";"";"";"";
"Can't charect:=boolean";"Нельзя “сим := лог”";"";"";"";"";
"No 'loop' before 'times'";"Перед “раз” нет “нц”";"";"";"";"";
"Wrong E-real number";"Ошибка в E-записи числа";"";"";"";"";
"Algorhitm header in algorhitm body";"Вложенное описание алгоритма";"";"";"";"";
"Array dimension must not be > 3";"Таблицы не бывают размерности > 3";"";"";"";"";
"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'";"Лишнее “не”";"";"";"";"";
"
Can't output value of type %1";"Нельзя вывести значение типа %1
";"";"";"";"";
"
'end' instead of 'endloop'";"“кон” вместо “кц”
";"";"";"";"";
"Keyword in name";"Ключевое слово в имени";"";"";"";"";
"Can't input an array";"";"";"";"";"";
"What to output to file?";"Что выводить в файл?";"";"";"";"";
"No 'case' after 'switch'";"Нет “при:” после “выбор”";"";"";"";"";
"Can't %1:=charect";"";"";"";"";"";
"= instead of :=";"";"";"";"";"";
"
Times value not specified";"Сколько раз?
";"";"";"";"";
"
Garbage afrer module name";"Мусор после имени исполнителя
";"";"";"";"";
"Array element in array bound";"Элемент таблицы в границе";"";"";"";"";
"Can't string:=%1";"";"";"";"";"";
"First unnamed algorithm should not return anything";"Алгоритм без имени ничего не возвращает";"";"";"";"";
"
Not integer for-loop variable";"Величина не целая
";"";"";"";"";
"
Extra format parameter";"Лишний параметр вывода
";"";"";"";"";
"No left array bound";"Нет левой границы таблицы";"";"";"";"";
"Integer constant too big";"Слишком большое целое число";"";"";"";"";
"Literal can't be part of name";"Константа в имени";"";"";"";"";
...
...
@@ -231,11 +234,12 @@
"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";"Не указан тип цикла";"";"";"";"";
...
...
@@ -286,8 +290,8 @@
"Extra ]";"Лишняя ]";"";"";"";"";
"No expressions after '%1'";"Нет величин после “%1”";"";"";"";"";
"Not integer times-value";"Величина не целая";"";"";"";"";
"
Unpaired '['";"Не парная “[
“";"";"";"";"";
"
Garbage between alg..begin";"Мусор между “алг”..”нач”
";"";"";"";"";
"
No pairing '('";"Нет парной “(
“";"";"";"";"";
"
Assignment of non-returning algorithm";"У этого алгоритма нет значения
";"";"";"";"";
"Bad symbol in name";"Имя содержит недопустимый символ";"";"";"";"";
"What to assign?";"Что назначать?";"";"";"";"";
"No condition after 'loop while'";"Нет условия после “нц пока”";"";"";"";"";
...
...
src/plugins/kumiranalizer/syntaxanalizer.cpp
View file @
88d77bd2
...
...
@@ -3039,6 +3039,67 @@ AST::Expression * SyntaxAnalizerPrivate::parseExpression(
int
prevPos
=
0
;
int
curPos
=
-
1
;
// First -- check brackets
QStack
<
Lexem
*>
openBrackets
;
QStack
<
Lexem
*>
openSqBrackets
;
QStack
<
Lexem
*>
openBraces
;
for
(
int
i
=
0
;
i
<
lexems
.
size
();
i
++
)
{
Lexem
*
lx
=
lexems
.
at
(
i
);
if
(
lx
->
type
==
LxOperLeftBr
)
{
openBrackets
.
push_back
(
lx
);
}
else
if
(
lx
->
type
==
LxOperLeftSqBr
)
{
openSqBrackets
.
push_back
(
lx
);
}
else
if
(
lx
->
type
==
LxOperLeftBrace
)
{
openBraces
.
push_back
(
lx
);
}
else
if
(
lx
->
type
==
LxOperRightBr
)
{
if
(
openBrackets
.
size
()
==
0
)
{
lx
->
error
=
_
(
"Unpaired )"
);
return
0
;
}
else
{
openBrackets
.
pop_back
();
}
}
else
if
(
lx
->
type
==
LxOperRightSqBr
)
{
if
(
openSqBrackets
.
size
()
==
0
)
{
lx
->
error
=
_
(
"Unpaired ]"
);
return
0
;
}
else
{
openSqBrackets
.
pop_back
();
}
}
else
if
(
lx
->
type
==
LxOperRightBrace
)
{
if
(
openBraces
.
size
()
==
0
)
{
lx
->
error
=
_
(
"Unpaired }"
);
return
0
;
}
else
{
openBraces
.
pop_back
();
}
}
}
foreach
(
Lexem
*
lx
,
openBrackets
)
{
lx
->
error
=
_
(
"Unpaired ("
);
}
foreach
(
Lexem
*
lx
,
openSqBrackets
)
{
lx
->
error
=
_
(
"Unpaired ["
);
}
foreach
(
Lexem
*
lx
,
openBraces
)
{
lx
->
error
=
_
(
"Unpaired {"
);
}
if
(
openBrackets
.
size
()
+
openSqBrackets
.
size
()
+
openBraces
.
size
()
>
0
)
{
return
0
;
}
while
(
curPos
<
lexems
.
size
())
{
blockType
=
None
;
block
.
clear
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment