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
ef874766
Commit
ef874766
authored
Dec 24, 2012
by
Victor Yacovlev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Files implementation
parent
803cdd40
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
1696 additions
and
1188 deletions
+1696
-1188
scripts/gen_actor_source.py
scripts/gen_actor_source.py
+95
-88
share/kumir2/kumiranalizer/messages.csv
share/kumir2/kumiranalizer/messages.csv
+31
-30
src/actors/complexnumbers/.gitignore
src/actors/complexnumbers/.gitignore
+3
-0
src/actors/complexnumbers/complexnumbers.json
src/actors/complexnumbers/complexnumbers.json
+19
-2
src/actors/complexnumbers/complexnumbersmodule.cpp
src/actors/complexnumbers/complexnumbersmodule.cpp
+58
-19
src/actors/complexnumbers/complexnumbersmodule.h
src/actors/complexnumbers/complexnumbersmodule.h
+10
-9
src/plugins/coregui/kumirprogram.cpp
src/plugins/coregui/kumirprogram.cpp
+18
-18
src/plugins/coregui/terminal_onesession.cpp
src/plugins/coregui/terminal_onesession.cpp
+5
-10
src/plugins/kumiranalizer/lexer.cpp
src/plugins/kumiranalizer/lexer.cpp
+0
-28
src/plugins/kumiranalizer/lexer.h
src/plugins/kumiranalizer/lexer.h
+2
-0
src/plugins/kumiranalizer/pdautomata.cpp
src/plugins/kumiranalizer/pdautomata.cpp
+1
-24
src/plugins/kumiranalizer/stdlibmodules.h
src/plugins/kumiranalizer/stdlibmodules.h
+11
-0
src/plugins/kumiranalizer/syntaxanalizer.cpp
src/plugins/kumiranalizer/syntaxanalizer.cpp
+275
-303
src/plugins/kumircodegenerator/generator.cpp
src/plugins/kumircodegenerator/generator.cpp
+85
-38
src/plugins/kumircoderun/plugin.cpp
src/plugins/kumircoderun/plugin.cpp
+0
-2
src/plugins/kumircoderun/plugin.h
src/plugins/kumircoderun/plugin.h
+0
-1
src/plugins/kumircoderun/run.cpp
src/plugins/kumircoderun/run.cpp
+226
-35
src/plugins/kumircoderun/run.h
src/plugins/kumircoderun/run.h
+20
-3
src/shared/dataformats/ast_statement.cpp
src/shared/dataformats/ast_statement.cpp
+0
-4
src/shared/dataformats/ast_statement.h
src/shared/dataformats/ast_statement.h
+0
-6
src/shared/interfaces/actorinterface.h
src/shared/interfaces/actorinterface.h
+0
-2
src/shared/interfaces/lexemtype.h
src/shared/interfaces/lexemtype.h
+1
-3
src/shared/stdlib/encodings.hpp
src/shared/stdlib/encodings.hpp
+1
-1
src/shared/stdlib/kumirstdlib.hpp
src/shared/stdlib/kumirstdlib.hpp
+456
-429
src/shared/vm/variant.hpp
src/shared/vm/variant.hpp
+61
-4
src/shared/vm/vm.hpp
src/shared/vm/vm.hpp
+287
-110
src/shared/vm/vm_enums.h
src/shared/vm/vm_enums.h
+1
-1
src/shared/vm/vm_tableelem.hpp
src/shared/vm/vm_tableelem.hpp
+30
-18
No files found.
scripts/gen_actor_source.py
View file @
ef874766
...
...
@@ -63,6 +63,10 @@ def name_to_cpp(name, firstUpper = False):
return
"OperatorGREATER"
elif
ascii
.
startswith
(
":="
):
return
"OperatorASSIGN"
elif
ascii
==
"input"
:
return
"OperatorINPUT"
elif
ascii
==
"output"
:
return
"OperatorOUTPUT"
for
c
in
ascii
:
if
c
==
' '
:
nextIsCap
=
True
...
...
@@ -89,13 +93,7 @@ def basetype_to_qtype(baseType):
if
type
(
name
)
==
dict
:
name
=
name
[
"ascii"
]
if
name
==
baseType
:
typename
=
tp
[
"cppdecl"
]
if
typename
.
startswith
(
"struct "
):
p
=
typename
.
index
(
"{"
)
typename
=
typename
[
7
:
p
]
if
typename
.
startswith
(
"class "
):
p
=
typename
.
index
(
"{"
)
typename
=
typename
[
6
:
p
]
typename
=
name_to_cpp
(
name
,
True
)
return
typename
return
baseType
...
...
@@ -127,51 +125,6 @@ actorCPPModuleName = name_to_cpp(actor["name"], firstUpper=True)+"Module"
hName
=
actorCPPModuleName
.
lower
()
+
"base.h"
cppName
=
actorCPPModuleName
.
lower
()
+
"base.cpp"
handlesCustomTypeConstant
=
"false"
if
"types"
in
actor
.
keys
():
for
tp
in
actor
[
"types"
]:
if
"constants"
in
tp
and
(
tp
[
"constants"
]
==
True
or
tp
[
"constants"
]
==
1
):
handlesCustomTypeConstant
=
"true"
break
parseCustomTypeConstantBody
=
" Q_UNUSED(typeName); Q_UNUSED(literal);
\n
"
parseCustomConstantH
=
""
parseCustomConstantHB
=
""
parseCustomConstantCPP
=
""
if
handlesCustomTypeConstant
:
firstIf
=
True
parseCustomTypeConstantBody
=
""
for
tp
in
actor
[
"types"
]:
typename
=
tp
[
"cppdecl"
]
if
typename
.
startswith
(
"struct "
):
p
=
typename
.
index
(
"{"
)
typename
=
typename
[
7
:
p
]
if
typename
.
startswith
(
"class "
):
p
=
typename
.
index
(
"{"
)
typename
=
typename
[
6
:
p
]
typename
=
typename
.
strip
()
if
"constants"
in
tp
.
keys
()
and
(
tp
[
"constants"
]
==
True
or
tp
[
"constants"
]
==
1
):
methodName
=
"parseConstantOfType_"
+
typename
if
firstIf
:
firstIf
=
False
parseCustomTypeConstantBody
+=
"if "
else
:
parseCustomTypeConstantBody
+=
" else if "
parseCustomTypeConstantBody
+=
"( literal==QString::fromAscii(
\"
%s
\"
) ) {
\n
"
%
typename
parseCustomTypeConstantBody
+=
" %s value;
\n
"
%
typename
parseCustomTypeConstantBody
+=
" if ( m_module->%s(literal, value) ) {
\n
"
%
methodName
parseCustomTypeConstantBody
+=
" char data[sizeof(%s)];
\n
"
%
typename
parseCustomTypeConstantBody
+=
" memcpy(data, &value, sizeof(value));
\n
"
parseCustomTypeConstantBody
+=
" result = QByteArray(data);
\n
"
parseCustomTypeConstantBody
+=
" }
\n
"
parseCustomTypeConstantBody
+=
" }
\n
"
parseCustomConstantH
+=
" bool "
+
methodName
+
"(const QString & literal, "
+
typename
+
" &value);
\n
"
parseCustomConstantHB
+=
" virtual bool "
+
methodName
+
"(const QString & literal, "
+
typename
+
" &value) = 0;
\n
"
parseCustomConstantCPP
+=
"bool "
+
actorCPPModuleName
+
"::"
+
methodName
+
"(const QString & literal, "
+
typename
+
" &value) {
\n
//TODO implement me
\n
return false;
\n
}
\n
"
DO_NOT_EDIT
=
"""/*
DO NOT EDIT THIS FILE!
...
...
@@ -194,14 +147,24 @@ if update:
if
"types"
in
actor
.
keys
():
for
tp
in
actor
[
"types"
]:
if
tp
[
"cppdecl"
].
startswith
(
"struct"
)
or
tp
[
"cppdecl"
].
startswith
(
"class"
):
h
.
write
(
tp
[
"cppdecl"
]
+
";
\n\n
"
)
name
=
name_to_cpp
(
tp
[
"name"
],
True
)
meta
=
""
for
field
in
tp
[
"fields"
]:
letter
=
field
[
"baseType"
][
0
]
meta
+=
letter
h
.
write
(
"struct %s {
\n
"
%
name
)
h
.
write
(
" inline static const char * _() { return
\"
%s
\"
; }
\n
"
%
meta
)
for
field
in
tp
[
"fields"
]:
fieldName
=
name_to_cpp
(
field
[
"name"
])
fieldType
=
basetype_to_qtype
(
field
[
"baseType"
])
h
.
write
(
" %s %s;
\n
"
%
(
fieldType
,
fieldName
))
h
.
write
(
"};
\n\n
"
)
h
.
write
(
"class %sBase
\n
: public QObject
\n
{
\n
"
%
actorCPPModuleName
)
h
.
write
(
" Q_OBJECT
\n
"
)
h
.
write
(
"public:
\n
"
)
h
.
write
(
" %sBase(ExtensionSystem::KPlugin * parent);
\n
"
%
actorCPPModuleName
)
h
.
write
(
parseCustomConstantHB
)
h
.
write
(
"public slots:
\n
"
)
h
.
write
(
" // Reset actor state before program starts
\n
"
)
h
.
write
(
" virtual void reset() = 0;
\n
"
)
...
...
@@ -476,9 +439,6 @@ public:
QString name() const;
inline QString mainIconName() const { return "$mainIconName"; }
inline QString pultIconName() const { return "$pultIconName"; }
inline virtual bool handlesCustomTypeConstant() const { return $handlesCustomTypeConstant; }
virtual QByteArray parseCustomTypeConstant(const QString & /*asciiTypeName*/,
const QString & /*literal*/) const;
// Actor GUI access
QWidget* mainWidget();
QWidget* pultWidget();
...
...
@@ -566,7 +526,6 @@ signals:
.
replace
(
"$mainIconName"
,
mainIconName
)
.
replace
(
"$pultIconName"
,
pultIconName
)
.
replace
(
"$asyncClassDecl"
,
asyncClassDecl
)
.
replace
(
"$handlesCustomTypeConstant"
,
handlesCustomTypeConstant
)
.
encode
(
"utf8"
)
)
...
...
@@ -656,6 +615,9 @@ def make_method_call(method, fromThread=False):
}
"""
else
:
comment
=
method
[
"name"
]
if
type
(
comment
)
==
dict
:
comment
=
comment
[
"ascii"
]
call
=
"m_module->run"
+
name_to_cpp
(
method
[
"name"
],
True
)
+
"("
arglines
=
[]
optresults
=
""
...
...
@@ -681,14 +643,14 @@ def make_method_call(method, fromThread=False):
argline
+=
"customTypeFromQVariant<%s>(%s)"
%
(
bt
,
argvar
)
if
arg
.
has_key
(
"access"
)
and
"out"
in
arg
[
"access"
]:
optresults
+=
" l_optResults << x"
+
str
(
index
+
1
)
+
";
\n
"
optresults
+=
"
l_optResults << x"
+
str
(
index
+
1
)
+
";
\n
"
argline
+=
";"
arglines
+=
[
argline
]
if
index
:
call
+=
", "
call
+=
"x"
+
str
(
index
+
1
)
call
+=
")"
if
optresults
:
optresults
=
" l_optResults.clear();
\n
"
+
optresults
optresults
=
"
l_optResults.clear();
\n
"
+
optresults
if
method
.
has_key
(
"returnType"
)
and
method
[
"returnType"
]
!=
"void"
:
if
method
[
"returnType"
]
in
[
"int"
,
"double"
,
"string"
,
"bool"
,
"char"
]:
call
=
"v_result = QVariant::fromValue(%s)"
%
call
...
...
@@ -707,6 +669,7 @@ def make_method_call(method, fromThread=False):
ret
=
"Shared::ES_NoResult"
if
not
fromThread
:
return
""" {
/* $comment */
$vardecl
$call
$optresults
...
...
@@ -718,9 +681,11 @@ def make_method_call(method, fromThread=False):
replace
(
"$vardecl"
,
string
.
join
(
arglines
,
"
\n
"
)).
\
replace
(
"$call"
,
call
+
";"
).
\
replace
(
"$ret"
,
ret
).
\
replace
(
"$optresults"
,
optresults
)
replace
(
"$optresults"
,
optresults
).
\
replace
(
"$comment"
,
comment
)
else
:
return
""" {
/* $comment */
$vardecl
$call
break;
...
...
@@ -728,7 +693,8 @@ def make_method_call(method, fromThread=False):
"""
.
\
replace
(
"$vardecl"
,
string
.
join
(
arglines
,
"
\n
"
)).
\
replace
(
"$call"
,
call
+
";"
).
\
replace
(
"$ret"
,
ret
)
replace
(
"$ret"
,
ret
).
\
replace
(
"$comment"
,
comment
)
evaluateMethods
=
map
(
make_method_call
,
actor
[
"methods"
])
evaluateMethods
=
map
(
lambda
x
:
(
" case %#06x:"
%
x
[
0
])
+
x
[
1
],
enumerate
(
evaluateMethods
))
...
...
@@ -795,22 +761,33 @@ if "settings" in actor:
.
replace
(
"$pluginName"
,
actorCPPName
+
"Plugin"
)
\
.
replace
(
"$actorLocalizedName"
,
actor
[
"name"
][
"ru_RU"
])
def
baseType_to_kumActorTypeEnum
(
baseType
):
if
baseType
==
"double"
:
return
"Real"
elif
baseType
==
"int"
:
return
"Int"
elif
baseType
==
"bool"
:
return
"Bool"
elif
baseType
==
"char"
:
return
"Char"
elif
baseType
==
"string"
:
return
"String"
makeTypes
=
""
if
"types"
in
actor
.
keys
():
makeTypes
+=
"Shared::ActorInterface::CustomType tp;
\n
"
makeTypes
+=
" Shared::ActorInterface::Record rec;
\n
"
for
tp
in
actor
[
"types"
]:
name
=
tp
[
"name"
]
if
type
(
name
)
==
dict
:
name
=
name
[
"ascii"
]
typename
=
tp
[
"cppdecl"
]
if
typename
.
startswith
(
"struct "
):
p
=
typename
.
index
(
"{"
)
typename
=
typename
[
7
:
p
]
if
typename
.
startswith
(
"class "
):
p
=
typename
.
index
(
"{"
)
typename
=
typename
[
6
:
p
]
kum_name
=
kumir_custom_typename
(
name
)
makeTypes
+=
" tp = Shared::ActorInterface::CustomType(QString::fromUtf8(
\"
"
+
kum_name
+
"
\"
), sizeof("
+
typename
+
"));
\n
"
makeTypes
+=
" rec.clear();
\n
"
;
for
field
in
tp
[
"fields"
]:
fieldName
=
name_to_cpp
(
field
[
"name"
])
fieldType
=
baseType_to_kumActorTypeEnum
(
field
[
"baseType"
])
makeTypes
+=
" rec << Field(QString::fromUtf8(
\"
%s
\"
), %s);
\n
"
%
(
fieldName
,
fieldType
)
makeTypes
+=
" tp = Shared::ActorInterface::CustomType(QString::fromUtf8(
\"
"
+
kum_name
+
"
\"
), rec);
\n
"
makeTypes
+=
" result << tp;
\n
"
...
...
@@ -895,13 +872,6 @@ Shared::ActorInterface::TypeList $className::typeList() const
return result;
}
QByteArray $className::parseCustomTypeConstant(const QString & typeName, const QString & literal) const
{
QByteArray result;
$parseCustomTypeConstantBody
return result;
}
QString $className::name() const
{
return QString::fromUtf8(
\"
$actorName
\"
);
...
...
@@ -960,10 +930,52 @@ T customTypeFromQVariant(const QVariant & value)
template <typename T>
QVariant customTypeToQVariant(const T & value)
{
char data[sizeof(T)];
memcpy(&data, &value, sizeof(T));
QByteArray valData(data);
return QVariant(valData);
QVariantList result;
const void * ptr = & value;
size_t offset = 0;
const size_t N = strlen(value._());
for (size_t i=0; i<N; i++) {
switch (value._()[i]) {
case 'i': {
const int * pval = reinterpret_cast<const int*>(ptr+offset);
int val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 'd': {
const qreal * pval = reinterpret_cast<const qreal*>(ptr+offset);
qreal val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 'b': {
const bool * pval = reinterpret_cast<const bool*>(ptr+offset);
bool val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 'c': {
const QChar * pval = reinterpret_cast<const QChar*>(ptr+offset);
QChar val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 's': {
const QString * pval = reinterpret_cast<const QString*>(ptr+offset);
QString val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
default:
break;
}
}
return QVariant(result);
}
Shared::EvaluationStatus $className::evaluate(quint32 index, const QVariantList & args)
...
...
@@ -1028,7 +1040,6 @@ Q_EXPORT_PLUGIN($namespace::$className)
.
replace
(
"$actorName"
,
actor
[
"name"
][
"ru_RU"
])
.
replace
(
"$settingsPageCreation"
,
settingsPageCreation
)
.
replace
(
"$makeTypes"
,
makeTypes
)
.
replace
(
"$parseCustomTypeConstantBody"
,
parseCustomTypeConstantBody
)
.
encode
(
"utf-8"
)
)
cpp
.
close
()
...
...
@@ -1104,7 +1115,7 @@ public:
// Constructor
$className(ExtensionSystem::KPlugin * parent);
$constantParser
public slots:
// Reset actor state before program starts
void reset();
...
...
@@ -1128,7 +1139,6 @@ $settingsIfNeed
.
replace
(
"$guiIfNeed"
,
guiIfNeed
)
.
replace
(
"$methods"
,
actorMethodsForHeader
)
.
replace
(
"$settingsIfNeed"
,
settingsIfNeed
)
.
replace
(
"$constantParser"
,
parseCustomConstantH
)
)
h
.
close
()
...
...
@@ -1169,13 +1179,10 @@ void $className::setAnimationEnabled(bool enabled)
*/
}
$constantsParsers
"""
.
replace
(
"$classHeader"
,
className
.
lower
()
+
".h"
)
.
replace
(
"$namespace"
,
actorCPPNameSpace
)
.
replace
(
"$className"
,
className
)
.
replace
(
"$constantsParsers"
,
parseCustomConstantCPP
)
)
if
windows
.
has_key
(
"main"
):
...
...
share/kumir2/kumiranalizer/messages.csv
View file @
ef874766
...
...
@@ -3,22 +3,22 @@
"No one 'case'";"Нет ни одного “при”";"";"";"";"";
"Broken if statement";"Нет “все” для этой конструкции";"";"";"";"";
"Can't %1 %2 %3";"Нельзя “%1 %2 %3”";"";"";"";"";
"T
he name is used by other algorithm";"Имя занято другим алгоритмом
";"";"";"";"";
"T
oo 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";"Нет имени исполнителя";"";"";"";"";
"Array dimension mismatch";"Несоответствие размерностей таблиц";"";"";"";"";
"No pairing 'begin module'";"Нет парной “исп”";"";"";"";"";
"No
condition after 'if'";"Нет условия для “если
”";"";"";"";"";
"No
'end' after 'then'";"Нет “все” после “то
”";"";"";"";"";
"The name is used by global variable";"Имя занято глобальной величиной";"";"";"";"";
"Extra variable group specifier: %1";"Лишнее описание группы величин";"";"";"";"";
"Array bounds no specified";"Нет границ";"";"";"";"";
...
...
@@ -31,12 +31,13 @@
"Can't integer:=charect";"Нельзя “цел := сим”";"";"";"";"";
"Can't charect:=integer";"Нельзя “сим := цел”";"";"";"";"";
"Can't boolean:=real";"Нельзя “лог := вещ”";"";"";"";"";
"T
oo many ':=' operators";"Много “:=” в одной строке
";"";"";"";"";
"T
he name is used by other algorithm";"Имя занято другим алгоритмом
";"";"";"";"";
"Variable already declared";"Величина уже описана";"";"";"";"";
"Can't boolean:=integer";"Нельзя “лог := цел”";"";"";"";"";
"Algorhitms can't return array";"Нельзя вернуть таблицу";"";"";"";"";
"'to' earler then 'from'";"“до” раньше чем “от”";"";"";"";"";
"Extra operator";"Лишний оператор";"";"";"";"";
"Can't input value of type %1";"";"";"";"";"";
"File already specified";"";"";"";"";"";
"Garbage after algorhitm header";"Мусор после “нач”";"";"";"";"";
"Extra 'endloop'";"Непарный “кц”";"";"";"";"";
...
...
@@ -76,7 +77,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";"Мусор после “выбор”";"";"";"";"";
"Not enought indeces";"Не все индексы";"";"";"";"";
...
...
@@ -102,12 +103,12 @@
"No 'then' after 'if'";"Где “то” после условия?";"";"";"";"";
"Assignment to complex expression";"Нельзя присвоить выражению";"";"";"";"";
"Can't real:=string";"Нельзя “вещ := лит”";"";"";"";"";
"
Wrong hex constant";"Плохая 16-ричная константа
";"";"";"";"";
"
Constant instead of name";"Здесь должно быть имя
";"";"";"";"";
"':=' 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";"Нельзя ввести в алгоритм";"";"";"";"";
"Can't integer:=string";"Нельзя “цел := лит”";"";"";"";"";
...
...
@@ -117,36 +118,35 @@
"Extra docstring";"Здесь не должно быть строк описания";"";"";"";"";
"Extra brackets for algorithm without arguments";"Нет аргументов – не нужны скобки";"";"";"";"";
"Assignment to function";"Нельзя присвоить алгоритму";"";"";"";"";
"
Constant instead of name";"Здесь должно быть имя
";"";"";"";"";
"
Index is not integer";"Индекс – не целое число
";"";"";"";"";
"
Wrong hex constant";"Плохая 16-ричная константа
";"";"";"";"";
"
Unmatched array dimensions";"Несоответствие размерностей таблиц
";"";"";"";"";
"Operator in name";"Имя содержит оператор";"";"";"";"";
"Garbage afrer module name";"Мусор после имени исполнителя";"";"";"";"";
"Table dimension > 3";"";"";"";"";"";
"Times value not specified";"Сколько раз?";"";"";"";"";
"No for-loop variable";"Нет величины цикла";"";"";"";"";
"Left array bound is not integer";"Левая граница – не целое";"";"";"";"";
"No condition after 'case'";"Нет условия после “при”";"";"";"";"";
"Incompatible types";"Плохой тип параметра";"";"";"";"";
"
'end_module' instead of 'end'";"“кон_исп” вместо “кон”
";"";"";"";"";
"
Unpaired ')'";"Непарная скобка
";"";"";"";"";
"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 loop 'to' value";"Нет “до” после “от”";"";"";"";"";
"Extra format";"";"";"";"";"";
"Can't charect:=string";"Нельзя “сим := лит”";"";"";"";"";
"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";"Несоответствие размерностей таблиц
";"";"";"";"";
"
Unpaired ')'";"Непарная скобка
";"";"";"";"";
"
Index is not integer";"Индекс – не целое число
";"";"";"";"";
"
Table dimension > 3";"
";"";"";"";"";
"Extra variable group out-specifier";"Лишний “рез”";"";"";"";"";
"No 'loop' before 'while'";"Перед “пока” нет “нц”";"";"";"";"";
"Extra 'case'";"“при” не на месте";"";"";"";"";
...
...
@@ -161,11 +161,12 @@
"Extra 'else'";"Лишнее “иначе”";"";"";"";"";
"Extra 'begin'";"Нет “кон” после “нач”";"";"";"";"";
"Extra variable group inout-specifier";"Лишний “аргрез”";"";"";"";"";
"Can't -%1";"Нельзя -%1";"";"";"";"";
"Extra indeces in slice";"Лишние индексы в вырезке";"";"";"";"";
"Unpaired '['";"Не парная “[“";"";"";"";"";
"Can't pass this expression as in/out-argumeny";"Не величина в аргрез-параметре";"";"";"";"";
"Must be a scalar constant";"";"";"";"";"";
"
Wrong E-real number";"Ошибка в E-записи числа
";"";"";"";"";
"
'end_module' instead of 'end'";"“кон_исп” вместо “кон”
";"";"";"";"";
"Extra 'end'";"Лишний “кон”";"";"";"";"";
"Algorhitm header in algorhitm body";"Вложенное описание алгоритма";"";"";"";"";
"Not a simple index";"Индекс – не число";"";"";"";"";
...
...
@@ -173,8 +174,8 @@
"Name contains quotation symbol";"Имя содержит кавычку";"";"";"";"";
"Not enought algorithm arguments";"Мало аргументов";"";"";"";"";
"Can't charect:=boolean";"Нельзя “сим := лог”";"";"";"";"";
"
No 'loop' before 'times'";"Перед “раз” нет “нц”
";"";"";"";"";
"
No 'loop' before 'for'";"Перед “для” нет “нц”
";"";"";"";"";
"
Array dimension must not be > 3";"Таблицы не бывают размерности > 3
";"";"";"";"";
"
Wrong E-real number";"Ошибка в E-записи числа
";"";"";"";"";
"Extra 'if'";"Нет “то..все” после “если”";"";"";"";"";
"No condition between 'case' and colon";"Нет условия между “при” и “:”";"";"";"";"";
"No then before else";"Нет “то” перед “иначе”";"";"";"";"";
...
...
@@ -183,12 +184,12 @@
"'end' instead of 'endloop'";"“кон” вместо “кц”";"";"";"";"";
"Keyword in name";"Ключевое слово в имени";"";"";"";"";
"No 'case' after 'switch'";"Нет “при:” после “выбор”";"";"";"";"";
"
Assignment of non-returning algorithm";"У этого алгоритма нет значения
";"";"";"";"";
"
Times value not specified";"Сколько раз?
";"";"";"";"";
"
Garbage between alg..begin";"Мусор между “алг”..”нач”
";"";"";"";"";
"
Garbage afrer module name";"Мусор после имени исполнителя
";"";"";"";"";
"Array element in array bound";"Элемент таблицы в границе";"";"";"";"";
"First unnamed algorithm should not return anything";"Алгоритм без имени ничего не возвращает";"";"";"";"";
"
Not integer for-loop variable";"Величина не целая
";"";"";"";"";
"
Condition after '%1' not boolean";"Условие после “%1” не логическое
";"";"";"";"";
"
Extra format parameter";"Лишний параметр вывода
";"";"";"";"";
"
No left array bound";"Нет левой границы таблицы
";"";"";"";"";
"Integer constant too big";"Слишком большое целое число";"";"";"";"";
"Literal can't be part of name";"Константа в имени";"";"";"";"";
"Access to return value outside of algorithm";"Вне алгоритмов не бывает “знач”";"";"";"";"";
...
...
@@ -198,9 +199,9 @@
"Can't string:=real";"Нельзя “лит := вещ”";"";"";"";"";
"No 'from'..'to'.. after variable";"Нет “от”..”до”.. после величины";"";"";"";"";
"Forgotten operator after bracket";"Перед выражением пропущен оператор";"";"";"";"";
"
Can't -%1";"Нельзя -%1
";"";"";"";"";
"
No 'loop' before 'for'";"Перед “для” нет “нц”
";"";"";"";"";
"Can't pass in-argument as out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";"";
"
No left array bound";"Нет левой границы таблицы
";"";"";"";"";
"
Condition after '%1' not boolean";"Условие после “%1” не логическое
";"";"";"";"";
"Can't integer:=real";"Нельзя “цел := вещ”";"";"";"";"";
"Array required here";"Индексы не нужны";"";"";"";"";
"No condition after 'end if'";"Нет условия для “кц при”";"";"";"";"";
...
...
@@ -248,7 +249,7 @@
"No expressions after '%1'";"Нет величин после “%1”";"";"";"";"";
"Not integer times-value";"Величина не целая";"";"";"";"";
"No pairing '('";"Нет парной “(“";"";"";"";"";
"
Garbage between alg..begin";"Мусор между “алг”..”нач”
";"";"";"";"";
"
Assignment of non-returning algorithm";"У этого алгоритма нет значения
";"";"";"";"";
"Bad symbol in name";"Имя содержит недопустимый символ";"";"";"";"";
"What to assign?";"Что назначать?";"";"";"";"";
"No condition after 'loop while'";"Нет условия после “нц пока”";"";"";"";"";
...
...
src/actors/complexnumbers/.gitignore
0 → 100644
View file @
ef874766
CMakeLists.txt
*base.*
*plugin.*
src/actors/complexnumbers/complexnumbers.json
View file @
ef874766
...
...
@@ -3,8 +3,10 @@
"types"
:
[
{
"name"
:
{
"ascii"
:
"complex"
,
"ru_RU"
:
"компл"
},
"cppdecl"
:
"struct Complex { double re; double im; }"
,
"constants"
:
true
"fields"
:
[
{
"name"
:
"re"
,
"baseType"
:
"double"
},
{
"name"
:
"im"
,
"baseType"
:
"double"
}
]
}
],
"methods"
:
[
...
...
@@ -67,6 +69,21 @@
"arguments"
:
[
{
"name"
:
"x"
,
"baseType"
:
"double"
}
]
},
{
"name"
:
{
"ascii"
:
"input"
,
"ru_RU"
:
"ввод"
},
"returnType"
:
"complex"
,
"arguments"
:
[
{
"name"
:
"x"
,
"baseType"
:
"string"
},
{
"name"
:
"ok"
,
"baseType"
:
"bool"
,
"access"
:
"out"
}
]
},
{
"name"
:
{
"ascii"
:
"output"
,
"ru_RU"
:
"вывод"
},
"returnType"
:
"string"
,
"arguments"
:
[
{
"name"
:
"x"
,
"baseType"
:
"complex"
}
]
}
]
}
src/actors/complexnumbers/complexnumbersmodule.cpp
View file @
ef874766
...
...
@@ -34,66 +34,105 @@ void ComplexNumbersModule::setAnimationEnabled(bool enabled)
*/
}
bool
ComplexNumbersModule
::
parseConstantOfType_Complex
(
const
QString
&
literal
,
Complex
&
value
)
{
//TODO implement me
return
false
;
}
qreal
ComplexNumbersModule
::
runRe
(
const
Complex
&
x
)
{
/* TODO implement me */
return
0.0
;
}
qreal
ComplexNumbersModule
::
run
Re
(
const
Complex
&
x
)
qreal
ComplexNumbersModule
::
run
Im
(
const
Complex
&
x
)
{
/* TODO implement me */
return
0.0
;
}
qreal
ComplexNumbersModule
::
runIm
(
const
Complex
&
x
)
Complex
ComplexNumbersModule
::
runOperatorPLUS
(
const
Complex
&
x
,
const
Complex
&
y
)
{
/* TODO implement me */
return
0.0
;
return
Complex
()
;
}
Complex
ComplexNumbersModule
::
runOperatorPLUS
(
const
Complex
&
x
,
const
Complex
&
y
)
Complex
ComplexNumbersModule
::
runOperatorMINUS
(
const
Complex
&
x
,
const
Complex
&
y
)
{
/* TODO implement me */
return
Complex
();
return
Complex
();
}
Complex
ComplexNumbersModule
::
runOperatorMINUS
(
const
Complex
&
x
,
const
Complex
&
y
)
Complex
ComplexNumbersModule
::
runOperatorASTERISK
(
const
Complex
&
x
,
const
Complex
&
y
)
{
/* TODO implement me */
return
Complex
();
return
Complex
();
}
Complex
ComplexNumbersModule
::
runOperatorASTERISK
(
const
Complex
&
x
,
const
Complex
&
y
)
Complex
ComplexNumbersModule
::
runOperatorSLASH
(
const
Complex
&
x
,
const
Complex
&
y
)
{
/* TODO implement me */
return
Complex
();
return
Complex
();
}
Complex
ComplexNumbersModule
::
runOperatorSLASH
(
const
Complex
&
x
,
const
Complex
&
y
)
Complex
ComplexNumbersModule
::
runOperatorASSIGN
(
const
int
x
)
{
/* TODO implement me */
return
Complex
();
return
Complex
();
}
Complex
ComplexNumbersModule
::
runOperatorASSIGN
(
const
int
x
)
Complex
ComplexNumbersModule
::
runOperatorASSIGN
(
const
qreal
x
)