GUI application doesn't parse any parameters, it shows the main application window with integrated development environment.
[woq@evm graphal]$ make RPATH_ORIGIN=yes dist ... [woq@evm graphal]$ cd build/dist/ [woq@evm dist]$ ./graphal_gui
Application that is executed without parameters shows usage and exits.
[woq@evm graphal]$ make RPATH_ORIGIN=yes dist ... [woq@evm graphal]$ cd build/dist/ [woq@evm dist]$ ./graphal_cli Graph Algorithms Interpreter - Graphal About: Version: 1.0.0 Author: Michal Turek Website: http://graphal.sourceforge.net/ License: libGraphal: GNU LGPL v3 Graphal CLI: GNU GPL v3 Graphal GUI: GNU GPL v3 Usage: ./graphal_cli [-h | --help] [-I<directory>] [-u | --unit-tests] [-a | --ast-dump] [-b | --enable-breakpoints] <filename> [parameters] -h | --help Show this help and exit. -v | --version Show version and exit. -I<directory> Specify include directories (relative to the current working directory). -I<directory_1> -I<directory_2> ... -I<directory_N> -u | --unit-tests Run unit tests. -a | --ast-dump Dump abstract syntax tree of the script. -b | --breakpoints Enable breakpoints. filename File to be executed. parameters Script parameters. [woq@evm dist]$
Pass a path as the last parameter to execute the script.
[woq@evm graphal]$ make RPATH_ORIGIN=yes dist ... [woq@evm graphal]$ cd build/dist/ [woq@evm dist]$ ./graphal_cli ../samples/01_factorial.txt [i] *** ENTERING SCRIPT MAIN *** Factorial of 0 is 1 Factorial of 1 is 1 Factorial of 2 is 2 Factorial of 3 is 6 Factorial of 4 is 24 Factorial of 5 is 120 Factorial of 6 is 720 Factorial of 7 is 5040 Factorial of 8 is 40320 Factorial of 9 is 362880 [i] *** EXITING SCRIPT MAIN, OK *** [i] Return value: 0 [i] *** EXITING MAIN, OK *** [woq@evm dist]$
Unit test mode is suitable to check that the application was compiled and works correctly.
[woq@evm graphal]$ make RPATH_ORIGIN=yes dist ... [woq@evm graphal]$ cd build/dist/ [woq@evm dist]$ valgrind ./graphal_cli --unit-tests ../samples/tests.txt ==13023== Memcheck, a memory error detector ==13023== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. ==13023== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info ==13023== Command: ./graphal_cli --unit-tests ../samples/tests.txt ==13023== [i] [ OK ] testDoubleDispatching [i] [ OK ] testValueStruct [i] [ OK ] testValueString [i] [ OK ] testValueReference [i] [ OK ] testValueIdentifier [i] [ OK ] testValueArray [i] [ OK ] testGraph [i] [ OK ] testGraphSet [i] [ OK ] testGraphInvertEdgesOrientation [i] [ OK ] testLexanTerminalSymbols [i] [ OK ] testLexanInt [i] [ OK ] testLexanFloat [i] [ OK ] testLexanString [i] [ OK ] testLexanComments [i] [ OK ] testLexanSourceCode [i] [ OK ] testNodeUnary [i] [ OK ] testNodeBinary [i] [ OK ] testNodeBlock [i] [ OK ] testNodeVariable [i] [ OK ] testStringTable [i] [ OK ] testCountPtr [i] [ OK ] testNodeFunction [i] [ OK ] testValueArrayIterator [i] [ OK ] testValueSet [i] [ OK ] testValueSetOperations [i] [ OK ] testValueSetRemove [i] Number of failed tests: 0 [i] *** ENTERING SCRIPT MAIN *** Executing unit tests... [ OK ] testFactorial [ OK ] testArray [ OK ] testStruct [ OK ] testGraph [ OK ] testMemberAccess [ OK ] testForeach [ OK ] testGlobal [ OK ] testUnionIntersectionDifference [ OK ] testTypeChecks [ OK ] testStackQueue [ OK ] testNotReferences [ OK ] testReferences [ OK ] testAdjacencyMatrix [ OK ] testSetPropertyToAll Number of failed tests: 0 [i] *** EXITING SCRIPT MAIN, OK *** [i] Return value: NULL [i] *** EXITING MAIN, OK *** ==13023== ==13023== HEAP SUMMARY: ==13023== in use at exit: 0 bytes in 0 blocks ==13023== total heap usage: 20,768 allocs, 20,768 frees, 393,222 bytes allocated ==13023== ==13023== All heap blocks were freed -- no leaks are possible ==13023== ==13023== For counts of detected and suppressed errors, rerun with: -v ==13023== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 20 from 7) [woq@evm dist]$
Dump of Abstract Syntax Tree is mainly for debugging purposes to check that the script's source code was parsed and stored to the internal form correctly.
/* * Copyright 2008 Michal Turek * * This file is part of Graphal. * http://graphal.sourceforge.net/ * * Graphal is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License. * * Graphal is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Graphal. If not, see <http://www.gnu.org/licenses/>. */ function factorial(number) { if(number < 2) return 1; else return number * factorial(number - 1); } // Enter to program function main(argv) { for(i = 0; i < 10; i++) println("Factorial of " + i + " is " + factorial(i)); return 0; }
[woq@evm graphal]$ make RPATH_ORIGIN=yes dist ... [woq@evm graphal]$ cd build/dist/ [woq@evm dist]$ ./graphal_cli --ast-dump ../samples/01_factorial.txt <Context> <BuiltinFunction name="echo" id="7" /> <BuiltinFunction name="print" id="8" /> ... <BuiltinFunction name="visGetGraph" id="74" /> <Function name="factorial" id="77"> <Parameter name="number" id="78" /> <If> <Condition> <NodeBinaryLt> <ValueIdentifier name="number" id="78"> <NoValue /> </ValueIdentifier> <ValueInt value="2" /> </NodeBinaryLt> </Condition> <IfSection> <NodeUnaryReturn> <ValueInt value="1" /> </NodeUnaryReturn> </IfSection> <ElseSection> <NodeUnaryReturn> <NodeBinaryMult> <ValueIdentifier name="number" id="78"> <NoValue /> </ValueIdentifier> <FunctionCall name="factorial" id="77"> <NodeBinarySub> <ValueIdentifier name="number" id="78"> <NoValue /> </ValueIdentifier> <ValueInt value="1" /> </NodeBinarySub> </FunctionCall> </NodeBinaryMult> </NodeUnaryReturn> </ElseSection> </If> </Function> <Function name="main" id="79"> <Parameter name="argv" id="80" /> <Loop> <Init> <NodeBinaryAss> <ValueIdentifier name="i" id="81"> <NoValue /> </ValueIdentifier> <ValueInt value="0" /> </NodeBinaryAss> </Init> <Condition> <NodeBinaryLt> <ValueIdentifier name="i" id="81"> <NoValue /> </ValueIdentifier> <ValueInt value="10" /> </NodeBinaryLt> </Condition> <Inc> <NodeUnaryIncPost> <ValueIdentifier name="i" id="81"> <NoValue /> </ValueIdentifier> </NodeUnaryIncPost> </Inc> <Body> <FunctionCall name="println" id="9"> <NodeBinaryAdd> <NodeBinaryAdd> <NodeBinaryAdd> <ValueString value="Factorial of " /> <ValueIdentifier name="i" id="81"> <NoValue /> </ValueIdentifier> </NodeBinaryAdd> <ValueString value=" is " /> </NodeBinaryAdd> <FunctionCall name="factorial" id="77"> <ValueIdentifier name="i" id="81"> <NoValue /> </ValueIdentifier> </FunctionCall> </NodeBinaryAdd> </FunctionCall> </Body> </Loop> <NodeUnaryReturn> <ValueInt value="0" /> </NodeUnaryReturn> </Function> <StringTable> <string id="0">built-in function</string> <string id="1">a</string> <string id="2">b</string> <string id="3">c</string> <string id="4">d</string> <string id="5">e</string> <string id="6">f</string> <string id="7">echo</string> <string id="8">print</string> ... <string id="79">main</string> <string id="80">argv</string> <string id="81">i</string> </StringTable> </Context> [i] *** ENTERING SCRIPT MAIN *** Factorial of 0 is 1 Factorial of 1 is 1 Factorial of 2 is 2 Factorial of 3 is 6 Factorial of 4 is 24 Factorial of 5 is 120 Factorial of 6 is 720 Factorial of 7 is 5040 Factorial of 8 is 40320 Factorial of 9 is 362880 [i] *** EXITING SCRIPT MAIN, OK *** [i] Return value: 0 [i] *** EXITING MAIN, OK *** [woq@evm dist]$