cauldron 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +51 -0
- data/Gemfile +6 -3
- data/Gemfile.lock +16 -3
- data/Rakefile +94 -92
- data/VERSION +1 -1
- data/bin/cauldron +2 -2
- data/cauldron.gemspec +15 -451
- data/features/cauldron_new_approach.feature +46 -0
- data/features/step_definitions/cauldron_steps.rb +11 -0
- data/features/step_definitions/terminal_steps.rb +0 -2
- data/features/support/env.rb +11 -1
- data/features/support/hooks.rb +5 -0
- data/lib/cauldron.rb +13 -7
- data/lib/cauldron/array_reverse_operator.rb +39 -0
- data/lib/cauldron/concat_operator.rb +34 -0
- data/lib/cauldron/if_relationship.rb +37 -0
- data/lib/cauldron/numeric_operator.rb +45 -0
- data/lib/cauldron/pot.rb +54 -162
- data/lib/cauldron/relationship.rb +5 -0
- data/lib/cauldron/terminal.rb +4 -60
- data/lib/cauldron/version.rb +3 -0
- data/lib/core/string.rb +21 -0
- data/sandbox.rb +27 -6
- data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
- data/spec/cauldron/concat_operator_spec.rb +89 -0
- data/spec/cauldron/if_relationship_spec.rb +25 -0
- data/spec/cauldron/numeric_operator_spec.rb +70 -0
- data/spec/cauldron/pot_spec.rb +81 -151
- data/spec/cauldron/terminal_spec.rb +1 -39
- data/spec/examples/adding_if_statement.yml +13 -0
- data/spec/examples/simple_head_theory.txt +13 -0
- data/spec/spec_helper.rb +1 -14
- data/tasks/theory_tasks.rake +207 -207
- metadata +92 -532
- data/cauldron/.autotest +0 -23
- data/cauldron/History.txt +0 -6
- data/cauldron/Manifest.txt +0 -8
- data/cauldron/README.txt +0 -57
- data/cauldron/Rakefile +0 -27
- data/cauldron/bin/cauldron +0 -3
- data/cauldron/lib/cauldron.rb +0 -3
- data/cauldron/test/test_cauldron.rb +0 -8
- data/features/cauldron_example_cases.feature +0 -13
- data/features/cauldron_generates_runtime_method.feature +0 -16
- data/features/cauldron_generates_single_paramter_methods.feature +0 -25
- data/features/cauldron_interactive_start_terminal.feature +0 -17
- data/features/cauldron_quit_terminal.feature +0 -9
- data/features/cauldron_start_terminal.feature +0 -12
- data/features/support/method_1.example +0 -3
- data/features/support/method_2.example +0 -6
- data/lib/Chain.rb +0 -771
- data/lib/ChainMapping.rb +0 -172
- data/lib/CodeHandler.rb +0 -513
- data/lib/Mapping.rb +0 -27
- data/lib/MappingValues.rb +0 -24
- data/lib/PartialChain.rb +0 -253
- data/lib/Theory.rb +0 -295
- data/lib/UnifiedChain.rb +0 -351
- data/lib/cauldron/conversion.rb +0 -15
- data/lib/cauldron/demos.rb +0 -280
- data/lib/cauldron/env.rb +0 -1
- data/lib/cauldron/sexp2cauldron.rb +0 -139
- data/lib/cauldron/theory_factory.rb +0 -10
- data/lib/cauldron/util/home.rb +0 -21
- data/lib/cauldron/util/saver.rb +0 -45
- data/lib/core/ActsAsCode.rb +0 -25
- data/lib/core/BlockToken.rb +0 -33
- data/lib/core/CCall.rb +0 -7
- data/lib/core/CTestCase.rb +0 -27
- data/lib/core/ClassMethodCallContainer.rb +0 -58
- data/lib/core/Container.rb +0 -95
- data/lib/core/InstanceCallContainer.rb +0 -298
- data/lib/core/MethodUsage.rb +0 -65
- data/lib/core/PrintVariables.rb +0 -25
- data/lib/core/TheoryGenerator.rb +0 -753
- data/lib/core/Token.rb +0 -7
- data/lib/core/assignment/Assignment.rb +0 -18
- data/lib/core/assignment/Equal.rb +0 -39
- data/lib/core/assignment/Equivalent.rb +0 -20
- data/lib/core/assignment/NotEqual.rb +0 -14
- data/lib/core/call_container/CallContainer.rb +0 -72
- data/lib/core/class_method_call/New.rb +0 -15
- data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
- data/lib/core/declaration/Declaration.rb +0 -16
- data/lib/core/declaration/LiteralDeclaration.rb +0 -47
- data/lib/core/declaration/VariableDeclaration.rb +0 -59
- data/lib/core/instance_call/ArrayEach.rb +0 -23
- data/lib/core/instance_call/ArrayLength.rb +0 -15
- data/lib/core/instance_call/Chop.rb +0 -19
- data/lib/core/instance_call/Copy.rb +0 -22
- data/lib/core/instance_call/DeclaredVariable.rb +0 -18
- data/lib/core/instance_call/InstanceCall.rb +0 -77
- data/lib/core/instance_call/Params.rb +0 -15
- data/lib/core/instance_call/Push.rb +0 -20
- data/lib/core/instance_call/StringLength.rb +0 -32
- data/lib/core/instance_call/Times.rb +0 -20
- data/lib/core/instance_call/instance_calls.rb +0 -176
- data/lib/core/instance_call/length_equal.rb +0 -15
- data/lib/core/kernal/EvalCall.rb +0 -15
- data/lib/core/kernal/LocalVariablesCall.rb +0 -15
- data/lib/core/literal/Literal.rb +0 -111
- data/lib/core/literal/Raw.rb +0 -23
- data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
- data/lib/core/literal/StatementLiteral.rb +0 -28
- data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
- data/lib/core/method_call/ClassCall.rb +0 -33
- data/lib/core/method_call/DefCall.rb +0 -72
- data/lib/core/method_call/EvaluateClassCall.rb +0 -29
- data/lib/core/method_call/MethodNameCall.rb +0 -27
- data/lib/core/method_call/ToDeclarationCall.rb +0 -15
- data/lib/core/requirement/Requirement.rb +0 -292
- data/lib/core/runtime_class/ArrayClass.rb +0 -19
- data/lib/core/runtime_class/ClassCallClass.rb +0 -23
- data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
- data/lib/core/runtime_class/ClassName.rb +0 -18
- data/lib/core/runtime_class/DefCallClass.rb +0 -21
- data/lib/core/runtime_class/EqualClass.rb +0 -19
- data/lib/core/runtime_class/FixnumClass.rb +0 -15
- data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
- data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
- data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
- data/lib/core/runtime_class/LiteralClass.rb +0 -19
- data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
- data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
- data/lib/core/runtime_class/RequirementClass.rb +0 -19
- data/lib/core/runtime_class/ReturnClass.rb +0 -21
- data/lib/core/runtime_class/RuntimeClass.rb +0 -30
- data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
- data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
- data/lib/core/runtime_class/StatementClass.rb +0 -53
- data/lib/core/runtime_class/StringClass.rb +0 -23
- data/lib/core/runtime_class/StringLengthClass.rb +0 -19
- data/lib/core/runtime_class/StringVariableClass.rb +0 -19
- data/lib/core/runtime_class/ThisClass.rb +0 -15
- data/lib/core/runtime_class/UnknownClass.rb +0 -23
- data/lib/core/runtime_class/class_names.rb +0 -95
- data/lib/core/runtime_class/runtime_class.rb +0 -123
- data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
- data/lib/core/runtime_method/ParametersContainer.rb +0 -29
- data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
- data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
- data/lib/core/runtime_method/WriteParameters.rb +0 -35
- data/lib/core/statement/ActsAsStatement.rb +0 -20
- data/lib/core/statement/ArrayAccess.rb +0 -122
- data/lib/core/statement/BlockStatement.rb +0 -348
- data/lib/core/statement/DeclarationStatement.rb +0 -19
- data/lib/core/statement/HackStatement.rb +0 -25
- data/lib/core/statement/HashAccess.rb +0 -18
- data/lib/core/statement/OpenStatement.rb +0 -178
- data/lib/core/statement/RealisedStatement.rb +0 -5
- data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
- data/lib/core/statement/Statement.rb +0 -1091
- data/lib/core/statement/StatementGroup.rb +0 -157
- data/lib/core/statement/StatementStructure2.rb +0 -224
- data/lib/core/statement/TheoryStatement.rb +0 -68
- data/lib/core/statement/TopologicalStatements.rb +0 -34
- data/lib/core/syntax/Addition.rb +0 -26
- data/lib/core/syntax/BlockContainer.rb +0 -102
- data/lib/core/syntax/Boolean.rb +0 -15
- data/lib/core/syntax/Code.rb +0 -11
- data/lib/core/syntax/Do.rb +0 -20
- data/lib/core/syntax/False.rb +0 -12
- data/lib/core/syntax/If.rb +0 -36
- data/lib/core/syntax/Nil.rb +0 -15
- data/lib/core/syntax/Return.rb +0 -33
- data/lib/core/syntax/Subtract.rb +0 -19
- data/lib/core/syntax/This.rb +0 -40
- data/lib/core/syntax/True.rb +0 -20
- data/lib/core/syntax/syntax.rb +0 -24
- data/lib/core/tracking/ActsAsTrackable.rb +0 -65
- data/lib/core/tracking/History.rb +0 -167
- data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
- data/lib/core/tracking/Step.rb +0 -52
- data/lib/core/variable/ArrayVariable.rb +0 -76
- data/lib/core/variable/BaseVariable.rb +0 -152
- data/lib/core/variable/BlockVariable.rb +0 -92
- data/lib/core/variable/FixnumVariable.rb +0 -35
- data/lib/core/variable/HistoryVariable.rb +0 -8
- data/lib/core/variable/MethodParameter.rb +0 -179
- data/lib/core/variable/MethodUsageVariable.rb +0 -60
- data/lib/core/variable/NilVariable.rb +0 -29
- data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
- data/lib/core/variable/StatementVariable.rb +0 -72
- data/lib/core/variable/StepVariable.rb +0 -7
- data/lib/core/variable/StringVariable.rb +0 -46
- data/lib/core/variable/TypeVariable.rb +0 -72
- data/lib/core/variable/Unknown.rb +0 -102
- data/lib/core/variable/UnknownVariable.rb +0 -29
- data/lib/core/variable/Variable.rb +0 -70
- data/lib/core/variable/VariableContainer.rb +0 -28
- data/lib/core/variable/VariableIncluded.rb +0 -27
- data/lib/core/variable/VariableReference.rb +0 -85
- data/lib/error/FailedToFindStatementContainerError.rb +0 -7
- data/lib/error/FailedToFindStatementError.rb +0 -7
- data/lib/error/FailedToFindVariableError.rb +0 -7
- data/lib/error/FailedToLiteraliseError.rb +0 -7
- data/lib/error/FailedVariableMatch.rb +0 -7
- data/lib/error/ImproperStatementUsageError.rb +0 -7
- data/lib/error/IncompatiableRequirementsError.rb +0 -7
- data/lib/error/InvalidStatementError.rb +0 -7
- data/lib/error/MethodSizeError.rb +0 -7
- data/lib/error/RuntimeSyntaxError.rb +0 -7
- data/lib/error/UnexpectedStatementTypeError.rb +0 -7
- data/lib/error/UnknownStatementType.rb +0 -7
- data/lib/error/UnliteralisableError.rb +0 -7
- data/lib/implemented_chain.rb +0 -35
- data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
- data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
- data/lib/intrinsic/IntrinsicObject.rb +0 -22
- data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
- data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
- data/lib/logger/StandardLogger.rb +0 -62
- data/lib/required.rb +0 -222
- data/lib/ruby_code/Array.rb +0 -95
- data/lib/ruby_code/Fixnum.rb +0 -39
- data/lib/ruby_code/Hash.rb +0 -25
- data/lib/ruby_code/NilClass.rb +0 -19
- data/lib/ruby_code/Object.rb +0 -24
- data/lib/ruby_code/String.rb +0 -63
- data/lib/ruby_code/Symbol.rb +0 -7
- data/lib/standard_library/Tasks.rb +0 -12
- data/lib/theories.rb +0 -166
- data/lib/theory/ActionImplementation.rb +0 -17
- data/lib/theory/TheoryAction.rb +0 -100
- data/lib/theory/TheoryChainValidator.rb +0 -103
- data/lib/theory/TheoryComponent.rb +0 -59
- data/lib/theory/TheoryConnector.rb +0 -756
- data/lib/theory/TheoryDependent.rb +0 -135
- data/lib/theory/TheoryImplementation.rb +0 -75
- data/lib/theory/TheoryResult.rb +0 -131
- data/lib/theory/TheoryVariable.rb +0 -63
- data/lib/theory/theory_collection.rb +0 -62
- data/lib/util/ClassEvaluation.rb +0 -44
- data/lib/util/CodeEvaluation.rb +0 -39
- data/lib/util/DeclarationStatementEvaluation.rb +0 -32
- data/lib/util/MethodEvaluation.rb +0 -49
- data/lib/util/MethodTester.rb +0 -71
- data/lib/util/MethodValidation.rb +0 -149
- data/lib/util/MethodWriter.rb +0 -66
- data/lib/util/Parser.rb +0 -305
- data/lib/util/StatementCheck.rb +0 -44
- data/lib/util/StringToTheory.rb +0 -142
- data/lib/util/System.rb +0 -8
- data/spec/cauldron/chain_spec.rb +0 -24
- data/spec/cauldron/demos_spec.rb +0 -30
- data/spec/cauldron/runtime_method_spec.rb +0 -92
- data/spec/cauldron/saver_spec.rb +0 -45
- data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
- data/spec/cauldron/theory_action_spec.rb +0 -25
- data/spec/cauldron/theory_connector_spec.rb +0 -52
- data/spec/cauldron/theory_spec.rb +0 -59
- data/spec/cauldron/unified_chain_spec.rb +0 -140
- data/test/fixtures/chains/1/declaration.txt +0 -26
- data/test/fixtures/chains/1/dump +0 -0
- data/test/fixtures/chains/2/declaration.txt +0 -26
- data/test/fixtures/chains/2/dump +0 -0
- data/test/fixtures/chains/3/declaration.txt +0 -26
- data/test/fixtures/chains/3/dump +0 -0
- data/test/fixtures/implementation_results/0/declaration.txt +0 -3
- data/test/fixtures/implementation_results/0/dump +0 -0
- data/test/fixtures/theories/0/declaration.txt +0 -9
- data/test/fixtures/theories/0/desc +0 -10
- data/test/fixtures/theories/0/dump +0 -0
- data/test/fixtures/theories/1/declaration.txt +0 -15
- data/test/fixtures/theories/1/desc +0 -11
- data/test/fixtures/theories/1/dump +0 -0
- data/test/fixtures/theories/10/declaration.txt +0 -23
- data/test/fixtures/theories/10/desc +0 -17
- data/test/fixtures/theories/10/dump +0 -0
- data/test/fixtures/theories/11/declaration.txt +0 -20
- data/test/fixtures/theories/11/desc +0 -14
- data/test/fixtures/theories/11/dump +0 -0
- data/test/fixtures/theories/12/declaration.txt +0 -18
- data/test/fixtures/theories/12/desc +0 -12
- data/test/fixtures/theories/12/dump +0 -0
- data/test/fixtures/theories/13/declaration.txt +0 -24
- data/test/fixtures/theories/13/desc +0 -20
- data/test/fixtures/theories/13/dump +0 -0
- data/test/fixtures/theories/14/declaration.txt +0 -26
- data/test/fixtures/theories/14/desc +0 -20
- data/test/fixtures/theories/14/dump +0 -0
- data/test/fixtures/theories/15/declaration.txt +0 -20
- data/test/fixtures/theories/15/desc +0 -14
- data/test/fixtures/theories/15/dump +0 -0
- data/test/fixtures/theories/16/declaration.txt +0 -30
- data/test/fixtures/theories/16/desc +0 -14
- data/test/fixtures/theories/16/dump +0 -0
- data/test/fixtures/theories/17/declaration.txt +0 -25
- data/test/fixtures/theories/17/desc +0 -11
- data/test/fixtures/theories/17/dump +0 -0
- data/test/fixtures/theories/18/declaration.txt +0 -23
- data/test/fixtures/theories/18/desc +0 -11
- data/test/fixtures/theories/18/dump +0 -0
- data/test/fixtures/theories/19/declaration.txt +0 -23
- data/test/fixtures/theories/19/desc +0 -11
- data/test/fixtures/theories/19/dump +0 -0
- data/test/fixtures/theories/2/declaration.txt +0 -12
- data/test/fixtures/theories/2/desc +0 -10
- data/test/fixtures/theories/2/dump +0 -0
- data/test/fixtures/theories/20/declaration.txt +0 -23
- data/test/fixtures/theories/20/desc +0 -17
- data/test/fixtures/theories/20/dump +0 -0
- data/test/fixtures/theories/3/declaration.txt +0 -19
- data/test/fixtures/theories/3/desc +0 -11
- data/test/fixtures/theories/3/dump +0 -0
- data/test/fixtures/theories/4/declaration.txt +0 -11
- data/test/fixtures/theories/4/desc +0 -11
- data/test/fixtures/theories/4/dump +0 -0
- data/test/fixtures/theories/5/declaration.txt +0 -6
- data/test/fixtures/theories/5/desc +0 -9
- data/test/fixtures/theories/5/dump +0 -0
- data/test/fixtures/theories/6/declaration.txt +0 -13
- data/test/fixtures/theories/6/desc +0 -11
- data/test/fixtures/theories/6/dump +0 -0
- data/test/fixtures/theories/7/declaration.txt +0 -19
- data/test/fixtures/theories/7/desc +0 -11
- data/test/fixtures/theories/7/dump +0 -0
- data/test/fixtures/theories/8/declaration.txt +0 -21
- data/test/fixtures/theories/8/desc +0 -11
- data/test/fixtures/theories/8/dump +0 -0
- data/test/fixtures/theories/9/declaration.txt +0 -24
- data/test/fixtures/theories/9/desc +0 -20
- data/test/fixtures/theories/9/dump +0 -0
- data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/0/desc.txt +0 -9
- data/test/fixtures/theory_implementations/0/dump +0 -0
- data/test/fixtures/theory_implementations/0/theory_id +0 -1
- data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/1/desc.txt +0 -9
- data/test/fixtures/theory_implementations/1/dump +0 -1
- data/test/fixtures/theory_implementations/1/theory_id +0 -1
- data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/2/desc.txt +0 -9
- data/test/fixtures/theory_implementations/2/dump +0 -0
- data/test/fixtures/theory_implementations/2/theory_id +0 -1
- data/test/output/simple_method.txt +0 -5
- data/test/output/test_method/first_possible_method.txt +0 -6
- data/test/output/test_simple_cases/simple_case_01.txt +0 -8
- data/test/output/test_simple_cases/simple_case_02.txt +0 -7
- data/test/output/test_simple_cases/simple_case_03.txt +0 -8
- data/test/output/test_simple_cases/simple_case_04.txt +0 -8
- data/test/output/test_simple_cases/simple_case_05.txt +0 -8
- data/test/output/test_simple_cases/simple_case_06.txt +0 -9
- data/test/output/test_simple_cases/simple_case_07.txt +0 -9
- data/test/output/test_simple_cases/simple_case_08.txt +0 -9
- data/test/tc_describe.rb +0 -46
- data/test/tc_method.rb +0 -130
- data/test/tc_requirement.rb +0 -30
- data/test/tc_suite_complete.rb +0 -26
- data/test/tc_variable.rb +0 -52
- data/test/ts_complete.rb +0 -74
- data/test/ts_stable.rb +0 -81
- data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
- data/test/unit/core/method_call/tc_class_call.rb +0 -20
- data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
- data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
- data/test/unit/core/statement/tc_array_access.rb +0 -63
- data/test/unit/core/statement/tc_block_statement.rb +0 -53
- data/test/unit/core/statement/tc_hack_statement.rb +0 -26
- data/test/unit/core/statement/tc_open_statement.rb +0 -79
- data/test/unit/core/statement/tc_statement.rb +0 -483
- data/test/unit/core/statement/tc_statement_group.rb +0 -35
- data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
- data/test/unit/core/statement/tc_theory_statement.rb +0 -53
- data/test/unit/core/syntax/tc_block_container.rb +0 -32
- data/test/unit/core/syntax/tc_if_container.rb +0 -39
- data/test/unit/core/tc_class_method_call.rb +0 -34
- data/test/unit/core/tc_container.rb +0 -41
- data/test/unit/core/tc_ctest_case.rb +0 -25
- data/test/unit/core/tc_instance_call_container.rb +0 -93
- data/test/unit/core/tc_literal.rb +0 -30
- data/test/unit/core/tc_theory_generator.rb +0 -336
- data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
- data/test/unit/core/tracking/tc_history.rb +0 -104
- data/test/unit/core/tracking/tc_step.rb +0 -65
- data/test/unit/core/variable/tc_array_variable.rb +0 -61
- data/test/unit/core/variable/tc_block_variable.rb +0 -17
- data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
- data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
- data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
- data/test/unit/core/variable/tc_string_variable.rb +0 -37
- data/test/unit/core/variable/tc_unknown.rb +0 -24
- data/test/unit/core/variable/tc_variable_reference.rb +0 -28
- data/test/unit/ruby_code/tc_array.rb +0 -64
- data/test/unit/ruby_code/tc_fixnum.rb +0 -18
- data/test/unit/ruby_code/tc_hash.rb +0 -41
- data/test/unit/ruby_code/tc_string.rb +0 -38
- data/test/unit/tc_chain.rb +0 -434
- data/test/unit/tc_chain_mapping.rb +0 -62
- data/test/unit/tc_chain_with_case_1.rb +0 -169
- data/test/unit/tc_instance_call.rb +0 -40
- data/test/unit/tc_method_usage.rb +0 -35
- data/test/unit/tc_pot.rb +0 -124
- data/test/unit/tc_runtime_tracking_method.rb +0 -40
- data/test/unit/tc_theory.rb +0 -531
- data/test/unit/tc_variable_declaration.rb +0 -32
- data/test/unit/theory/tc_theory_action.rb +0 -108
- data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
- data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
- data/test/unit/theory/tc_theory_connector.rb +0 -361
- data/test/unit/theory/tc_theory_dependent.rb +0 -153
- data/test/unit/theory/tc_theory_implementation.rb +0 -137
- data/test/unit/theory/tc_theory_result.rb +0 -112
- data/test/unit/theory/tc_theory_variable.rb +0 -45
- data/test/unit/util/tc_method_validation.rb +0 -101
- data/test/unit/util/tc_parser.rb +0 -110
- data/test/unit/util/tc_string_to_theory.rb +0 -300
- data/test/unit/variable/tc_method_usage_variable.rb +0 -25
- data/tmp/runtime_method_evaluation.rb +0 -16
@@ -1,157 +0,0 @@
|
|
1
|
-
class StatementGroup < Array
|
2
|
-
attr_reader :scope, :scope_id, :statement_level
|
3
|
-
attr_writer :scope, :scope_id, :statement_level
|
4
|
-
|
5
|
-
# The scope id is used to determine what variables are available with the nested statement
|
6
|
-
@@scope_id = 0
|
7
|
-
|
8
|
-
alias :array_push :push
|
9
|
-
|
10
|
-
def initialize(*statements)
|
11
|
-
super()
|
12
|
-
statements.each {|x| self.push(x)}
|
13
|
-
|
14
|
-
# Update the scope id for the nested statement
|
15
|
-
@scope_id = @@scope_id
|
16
|
-
@@scope_id += 1
|
17
|
-
|
18
|
-
@scope = [@scope_id]
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
def cauldron_method_calls
|
23
|
-
return ['.statement_id']
|
24
|
-
end
|
25
|
-
|
26
|
-
def write(tab=0)
|
27
|
-
line = ''
|
28
|
-
self.each {|x| line += x.write(tab)+"\n" }
|
29
|
-
return line
|
30
|
-
end
|
31
|
-
|
32
|
-
def describe(tab=0)
|
33
|
-
line = ''
|
34
|
-
#self.each {|x| line += x.describe(tab)+"\n" }
|
35
|
-
self.each do |x|
|
36
|
-
line += x.describe(tab)+"\n"
|
37
|
-
end
|
38
|
-
return line
|
39
|
-
end
|
40
|
-
|
41
|
-
# Removes any statements that simple re-declare an existing statement
|
42
|
-
# e.g var_a = var_b.
|
43
|
-
#
|
44
|
-
def remove_simple
|
45
|
-
results = StatementGroup.new
|
46
|
-
self.each do |x|
|
47
|
-
results.push x unless x.is_simple?
|
48
|
-
end
|
49
|
-
return results
|
50
|
-
end
|
51
|
-
|
52
|
-
def push(*entries)
|
53
|
-
self.entries.each do |x|
|
54
|
-
x.scope = [@scope_id]
|
55
|
-
end
|
56
|
-
#super.array_push(*entries)
|
57
|
-
entries.each do |y|
|
58
|
-
|
59
|
-
# TODO Oddly super.array_push seems to add it twice - might investigate
|
60
|
-
#super.array_push(y)
|
61
|
-
array_push(y)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# TODO This method name doesn't suit what it returns
|
66
|
-
def statement_id
|
67
|
-
return @scope_id
|
68
|
-
end
|
69
|
-
|
70
|
-
# Returns a statement container (either a runtime method or a nested statement)
|
71
|
-
# thats scope is the statement level specified. This means that any statements
|
72
|
-
# with the statement level specified should reside directly in the statement
|
73
|
-
# container.
|
74
|
-
#
|
75
|
-
# @param statement_level The statement level the statement group should
|
76
|
-
# contain statements at.
|
77
|
-
#
|
78
|
-
def find_container_at_level(statement_level)
|
79
|
-
return self if scope_id == statement_level
|
80
|
-
self.each do |x|
|
81
|
-
if x.kind_of?(StatementGroup)
|
82
|
-
begin
|
83
|
-
return x.find_container_at_level(statement_level)
|
84
|
-
rescue FailedToFindStatementContainerError => e
|
85
|
-
next
|
86
|
-
end
|
87
|
-
#result = x.find_container_at_level(statement_level)
|
88
|
-
#return result unless result.nil?
|
89
|
-
end
|
90
|
-
end
|
91
|
-
raise FailedToFindStatementContainerError.new('Failed to find containing statement with id '+statement_level.to_s)
|
92
|
-
#return nil
|
93
|
-
#raise StandardEror.new('There is no container at level '+)
|
94
|
-
end
|
95
|
-
|
96
|
-
# Returns the statement thats id matches that supplied.
|
97
|
-
#
|
98
|
-
# @param id The id of the statement should exist in the runtime method
|
99
|
-
#
|
100
|
-
def find_statement(id)
|
101
|
-
self.each do |x|
|
102
|
-
begin
|
103
|
-
return x.find_statement(id)
|
104
|
-
rescue FailedToFindStatementError => e
|
105
|
-
next
|
106
|
-
end
|
107
|
-
end
|
108
|
-
raise FailedToFindStatementError.new('Couldn\'t find statement with id '+id.to_s)
|
109
|
-
end
|
110
|
-
|
111
|
-
# Returns an array of all the runtime method instances that are
|
112
|
-
# required for this statement group. This is essentially the
|
113
|
-
# runtime methods referenced in DefCalls.
|
114
|
-
#
|
115
|
-
def find_all_required_runtime_methods
|
116
|
-
results = []
|
117
|
-
self.each do |x|
|
118
|
-
results += x.find_all_required_runtime_methods
|
119
|
-
end
|
120
|
-
return results
|
121
|
-
end
|
122
|
-
|
123
|
-
def copy
|
124
|
-
result = self.class.new(*self.collect {|x| x.copy })
|
125
|
-
result.scope_id = scope_id
|
126
|
-
result.scope = scope
|
127
|
-
result.statement_level = statement_level
|
128
|
-
return result
|
129
|
-
end
|
130
|
-
|
131
|
-
# Identify any of the contained statements that override an
|
132
|
-
# existing variable.
|
133
|
-
#
|
134
|
-
# @param already_declared An array of previously declared variable ids in the
|
135
|
-
# following format. [{:variable_id=>43},{:variable_id=>12}, ..]
|
136
|
-
#
|
137
|
-
def identify_overriding_statements(already_declared=[])
|
138
|
-
self.each do |x|
|
139
|
-
x.identify_overriding_statements(already_declared)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
# Returns an array of overriding statements that reside inside
|
144
|
-
# this statement group. A overriding statement is a statement that
|
145
|
-
# re-declares or modifies a previously declared variable.
|
146
|
-
#
|
147
|
-
# @param overriding_statements An array of statements that have been overriden
|
148
|
-
# within the statement group.
|
149
|
-
#
|
150
|
-
def find_overriding_statements(overriding_statements=[])
|
151
|
-
self.each do |x|
|
152
|
-
x.find_overriding_statements(overriding_statements)
|
153
|
-
end
|
154
|
-
return overriding_statements
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
@@ -1,224 +0,0 @@
|
|
1
|
-
# Move this class to the structure folder
|
2
|
-
#
|
3
|
-
# TODO This is more a StatementStructureFactory
|
4
|
-
class StatementStructure2 < Array
|
5
|
-
|
6
|
-
# attr_reader :declared_fixnum
|
7
|
-
#
|
8
|
-
# @@DECLARED_FIXNUM = 'declared_fixnum'
|
9
|
-
# DECLARE_STRING = 'declared_string'
|
10
|
-
# DECLARE_STRING_ADDITION = 'declared_string_addition'
|
11
|
-
TIMES_ON_FIXNUM = 'times_on_fixnum'
|
12
|
-
|
13
|
-
# TODO I don't think I really need to pass the parameters anymore
|
14
|
-
def initialize(name)
|
15
|
-
# TODO What are the two parameters an array expects
|
16
|
-
super()
|
17
|
-
|
18
|
-
@structure_name = name
|
19
|
-
|
20
|
-
# Add the parameters to the array
|
21
|
-
structure().each do |code|
|
22
|
-
self.push(code)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# var = 'test'+'ing'
|
27
|
-
def StatementStructure2.declared_string_addition
|
28
|
-
return 'declared_string_addition'
|
29
|
-
end
|
30
|
-
|
31
|
-
def StatementStructure2.times_on_fixnum
|
32
|
-
return 'times_on_fixnum'
|
33
|
-
end
|
34
|
-
|
35
|
-
def StatementStructure2.declared_array
|
36
|
-
return 'declared_array'
|
37
|
-
end
|
38
|
-
|
39
|
-
def StatementStructure2.declared_runtime_method
|
40
|
-
return 'declared_runtime_method'
|
41
|
-
end
|
42
|
-
|
43
|
-
# var = 5+8
|
44
|
-
def StatementStructure2.declared_fixnum_addition
|
45
|
-
return 'declared_fixnum_addition'
|
46
|
-
end
|
47
|
-
|
48
|
-
def StatementStructure2.declared_statement
|
49
|
-
return 'declared_statement'
|
50
|
-
end
|
51
|
-
|
52
|
-
def structure
|
53
|
-
case @structure_name
|
54
|
-
# when StatementStructure2.declared_fixnum
|
55
|
-
# return [Unknown,Equal,FixnumVariable]
|
56
|
-
# when StatementStructure2.declared_string
|
57
|
-
# return [Unknown,Equal,StringVariable]
|
58
|
-
when StatementStructure2.declared_array
|
59
|
-
return [Unknown,Equal,ArrayVariable]
|
60
|
-
when StatementStructure2.declared_runtime_method
|
61
|
-
return DeclareRuntimeMethodStructure.new()
|
62
|
-
when StatementStructure2.declared_string_addition
|
63
|
-
return [Unknown,Equal,StringVariable,Addition,StringVariable]
|
64
|
-
when StatementStructure2.declared_fixnum_addition
|
65
|
-
return FixnumAdditionStructure.new()
|
66
|
-
when StatementStructure2.declared_statement
|
67
|
-
return DeclareStatementStructure.new()
|
68
|
-
else
|
69
|
-
raise StandardError.new('Unknown statement structure "'+@structure_name+'"')
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
# Returns an array of possible statements that can be
|
74
|
-
# created to follow the structure of the statement.
|
75
|
-
#
|
76
|
-
# Any method calls are considered as their returned value. So
|
77
|
-
# a method that returns a string is just considered as a
|
78
|
-
# RuntimeVariable with a string class requirement.
|
79
|
-
#
|
80
|
-
def statements(available=[])
|
81
|
-
|
82
|
-
# Retrieve the statements for
|
83
|
-
if(@structure_name==StatementStructure2.times_on_fixnum)
|
84
|
-
return fixnum_times_statements(available)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Create an array of statements that gets extended
|
88
|
-
partial_statements = [Statement.new]
|
89
|
-
|
90
|
-
# Go through each element of the statement structure
|
91
|
-
self.each do |statement_element|
|
92
|
-
|
93
|
-
# Creates an array of updated statements
|
94
|
-
updated_statements = []
|
95
|
-
|
96
|
-
# If it is an unknown variable just add it
|
97
|
-
if(statement_element == Unknown)
|
98
|
-
partial_statements = add_unknown_variable(partial_statements)
|
99
|
-
next
|
100
|
-
end
|
101
|
-
|
102
|
-
# Just include it if it's a = sign
|
103
|
-
if(statement_element == Equal)or(statement_element == Addition)
|
104
|
-
|
105
|
-
# Go through each element in the partial statements and add a copy of the new element
|
106
|
-
partial_statements.each do |partial|
|
107
|
-
copied_statement = partial.copy
|
108
|
-
copied_statement.push(statement_element.new)
|
109
|
-
updated_statements.push copied_statement
|
110
|
-
end
|
111
|
-
partial_statements = updated_statements
|
112
|
-
next
|
113
|
-
end
|
114
|
-
|
115
|
-
# Go through each of the available elements and see if they meet the statement elements
|
116
|
-
available.each do |avail|
|
117
|
-
|
118
|
-
# If any of the values match - include them in the statement
|
119
|
-
if avail.kind_of?(statement_element)
|
120
|
-
|
121
|
-
# Go through each element in the partial statements and add a copy of the new element
|
122
|
-
partial_statements.each do |partial|
|
123
|
-
copied_statement = partial.copy
|
124
|
-
copied_statement.push(avail.copy)
|
125
|
-
updated_statements.push copied_statement
|
126
|
-
end
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
# Now see what instance calls are available to the passed avail
|
131
|
-
if avail.kind_of?(Variable)
|
132
|
-
|
133
|
-
# Retrieve any instance calls available for that variable
|
134
|
-
# TODO Availabe should not include the variable with the same id
|
135
|
-
instance_calls = avail.instance_calls(available)
|
136
|
-
instance_calls.each do |x|
|
137
|
-
|
138
|
-
if x.response.class == statement_element
|
139
|
-
|
140
|
-
partial_statements.each do |partial|
|
141
|
-
copied_statement = partial.copy
|
142
|
-
copied_statement.push(x.copy)
|
143
|
-
updated_statements.push copied_statement
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
150
|
-
|
151
|
-
# If it is a definition call then check against the response value
|
152
|
-
if avail.kind_of?(DefCall)
|
153
|
-
if avail.response.class == statement_element
|
154
|
-
partial_statements.each do |y|
|
155
|
-
copied_statement = y.copy
|
156
|
-
copied_statement.push(avail.copy)
|
157
|
-
updated_statements.push copied_statement
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
end
|
163
|
-
|
164
|
-
partial_statements = updated_statements
|
165
|
-
|
166
|
-
end
|
167
|
-
|
168
|
-
# # Save the structure used to create the statement - this structure type will
|
169
|
-
# # become deprecated soom.
|
170
|
-
# partial_statements.each do |x|
|
171
|
-
# x.structure = self.class
|
172
|
-
# end
|
173
|
-
|
174
|
-
return partial_statements
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
# Returns a general description of the statement to
|
179
|
-
# indicate whether it declares a new variable or
|
180
|
-
# modifies an existing variable or nothing.
|
181
|
-
#
|
182
|
-
def self.statement_type
|
183
|
-
#raise StandardError.new('This method should be overridden "'+self.to_s+'"')
|
184
|
-
StandardLogger.instance.warning('This method should be used')
|
185
|
-
#return StatementStructure.DECLARATION_STATEMENT
|
186
|
-
return 'declaration_statement'
|
187
|
-
end
|
188
|
-
|
189
|
-
protected
|
190
|
-
|
191
|
-
# TODO Write tests
|
192
|
-
# Adds a unknown variable to each statement in the supplied
|
193
|
-
# array and returns the result.
|
194
|
-
#
|
195
|
-
def add_unknown_variable(current_statements)
|
196
|
-
results = []
|
197
|
-
current_statements.each do |x|
|
198
|
-
copied = x.copy
|
199
|
-
copied.push(Unknown.new)
|
200
|
-
results.push copied
|
201
|
-
end
|
202
|
-
return results
|
203
|
-
end
|
204
|
-
|
205
|
-
# Get the possible .times statements from the available
|
206
|
-
# fixnum variables
|
207
|
-
#
|
208
|
-
def fixnum_times_statements(available=[])
|
209
|
-
|
210
|
-
# If there aren't any fixnum variables there is nothing to return
|
211
|
-
return [] unless available.any? {|x| x.kind_of?(FixnumVariable)}
|
212
|
-
|
213
|
-
# Use each of the fixnum variables
|
214
|
-
results = []
|
215
|
-
available.find_all {|x| x.kind_of?(FixnumVariable) }.each do |y|
|
216
|
-
new_statement = BlockStatement.new(Statement.new(InstanceCallContainer.new(y.copy,Times.new)),BlockContainer.new(BlockVariable.new))
|
217
|
-
new_statement.structure = self.class
|
218
|
-
results.push(new_statement)
|
219
|
-
end
|
220
|
-
|
221
|
-
return results
|
222
|
-
end
|
223
|
-
|
224
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# This class represents the general descriptions used inside the three
|
2
|
-
# components of theories.
|
3
|
-
#
|
4
|
-
# TODO The statement class this extends is extremely bloated but I
|
5
|
-
# need to create some complex journeys before I can start to
|
6
|
-
# trim the fat.
|
7
|
-
#
|
8
|
-
class TheoryStatement < Statement
|
9
|
-
|
10
|
-
def initialize(*parameters)
|
11
|
-
super(*parameters)
|
12
|
-
end
|
13
|
-
|
14
|
-
# TODO map_to might replace the need for this method
|
15
|
-
# TODO How does this work for instance call containers and array access?
|
16
|
-
def replace_theory_variables!(mapping)
|
17
|
-
self.each_with_index do |x,i|
|
18
|
-
if x.kind_of?(TheoryVariable) && mapping.has_key?(x.theory_variable_id)
|
19
|
-
self[i] = mapping[x.theory_variable_id].copy
|
20
|
-
next
|
21
|
-
end
|
22
|
-
self[i].replace_theory_variables!(mapping) if self[i].respond_to?(:replace_theory_variables!)
|
23
|
-
end
|
24
|
-
self
|
25
|
-
end
|
26
|
-
|
27
|
-
# TODO This method was just nicked from TheoryDependent
|
28
|
-
# TODO A similar method exists in Statement
|
29
|
-
#
|
30
|
-
def map_to(mapping)
|
31
|
-
|
32
|
-
# Duplicate the current statement before it is rewritten
|
33
|
-
rewritten_statement = self.copy
|
34
|
-
|
35
|
-
# Find all the containers that contain TheoryVariables
|
36
|
-
# NOTE The statement is put in an array because select all doesn't include the array itself
|
37
|
-
containers = [rewritten_statement].select_all {|x| x.respond_to?(:has?)}
|
38
|
-
theory_variable_containers = containers.select {|x| x.has? {|y| y.kind_of?(TheoryVariable)}}
|
39
|
-
|
40
|
-
# Rewrite the statement replacing the values
|
41
|
-
theory_variable_containers.each do |z|
|
42
|
-
z.replace_theory_variables!(mapping)
|
43
|
-
end
|
44
|
-
|
45
|
-
return rewritten_statement
|
46
|
-
#return TheoryDependent.new(rewritten_statement,@theory_component_id)
|
47
|
-
end
|
48
|
-
|
49
|
-
# =>
|
50
|
-
# => map [<TheoryVariable>=><TheoryVariable>]
|
51
|
-
def replace_variables_alt!(map)
|
52
|
-
self.each do |x|
|
53
|
-
x.replace_variables_alt!(map)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# TODO Maybe use a opject to handle the output of the statement.
|
58
|
-
def describe(tab=0)
|
59
|
-
line = ''
|
60
|
-
tab.times {line += " " }
|
61
|
-
self.each do |code|
|
62
|
-
line += code.describe
|
63
|
-
break if code.object_id == self.last.object_id
|
64
|
-
end
|
65
|
-
return line
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|