{"id":4073,"date":"2020-12-21T19:00:00","date_gmt":"2020-12-21T18:00:00","guid":{"rendered":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/?p=4073"},"modified":"2022-10-20T10:57:24","modified_gmt":"2022-10-20T08:57:24","slug":"how-to-create-a-programming-language","status":"publish","type":"post","link":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/","title":{"rendered":"How Create Your Own Programming Language"},"content":{"rendered":"\n<p class=\"has-medium-font-size wp-block-paragraph\">Many programmers or, programming enthusiasts, during their professional career, find themselves having to use various programming languages. It is often to exploit techniques and algorithms, sometimes even very sophisticated, for the resolution of problems that gradually arise. During this process, many of them ask themselves this question: &#8220;<strong>How to create your own programming language?<\/strong>&#8220;, Or, &#8220;<strong>What is hidden behind a command of any language?<\/strong>&#8220;.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Before answering this question, we will try to understand how many types of programming languages exist.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Today, we have two types of languages, there are compiled languages and interpreted languages. The difference is substantial, in compiled languages, the source code, that is our program, is converted into an executable file directly from the machine without the aid of any intermediate translation software. In interpreted languages, on the other hand, our source is not converted into an executable file but translated command by command and executed from time to time by an intermediate program called interpreter.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In summary, we can say that compiled languages are converted by a software called a compiler, while the commands of an interpreted language are executed directly by a software called an interpreter.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In this article I will explain how to create a programming language, specifically an interpreter, as it is &#8220;simpler and more immediate&#8221; than the design of a compiler, which would require not only a thorough knowledge of some very sophisticated tools, which we will see, but also a advanced knowledge of the type of processor that will have to execute the code.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">But what will you be able to do after reading this article? Well, you will understand the use of a Lexer and a Parser, how to program them up to designing your own command shell and creating one of the essential commands for any language: &#8220;the Print command&#8221;. In short, you will discover how to create commands, pass parameters to them and execute them within the command shell, which you will design and customize to your liking. Not only that, but you will also see how to execute these commands by saving them in a script and creating your own interpreter.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">In questo articolo:<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Required_software\" >Required software<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Text_editor\" >Text editor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#C_language_compiler\" >C language compiler<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Install_the_Parser\" >Install the Parser<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Install_the_lexical_analyzer\" >Install the lexical analyzer<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Verification_of_correct_software_installation\" >Verification of correct software installation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Regular_expressions\" >Regular expressions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#The_structure_of_the_interpreter\" >The structure of the interpreter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Implementation_of_the_lexicon\" >Implementation of the lexicon<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Grammar_implementation\" >Grammar implementation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Compilation_of_the_interpreter\" >Compilation of the interpreter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#Conclusion\" >Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Required_software\"><\/span><strong>Required software<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Like any self-respecting project, we need to download what is necessary, that is, to set up our toolbox, in order to configure the design environment essential for this purpose. The tools we will use are all open source, that is, they can be downloaded and used for free. All the software we will use are available for the most popular Operating Systems, therefore what we will see in this article is not oriented to a specific operating system but is applicable to both Windows and Linux systems.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Text_editor\"><\/span><strong>Text editor<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Since we will need to edit text files, we necessarily need a text editor. Among the many available on the net, I recommend Visual studio Code, Microsoft&#8217;s free editor with excellent features, ideal for any language and software project.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">To download Visual Studio Code <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noreferrer noopener sponsored nofollow\">go to this link<\/a> where you can choose the package for the OS. desired and proceed with the installation, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-800x434.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4041\" width=\"800\" height=\"434\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-800x434.jpg 800w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-300x163.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-768x416.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code.jpg 1430w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">This editor does not need, for our needs, configuration or customization but, <a href=\"https:\/\/youtu.be\/VqCgcpAypFQ\" target=\"_blank\" rel=\"noreferrer noopener sponsored nofollow\">here you will find an explanatory video of the Visual Studio Code download and installation process<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"C_language_compiler\"><\/span><strong>C language compiler<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Another necessary tool is a C language compiler, we will use MinGW, MinGW is the Windows porting of the famous GCC compiler for Linux.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Only and only if you use Windows, you have to download the C MinGW compiler <a href=\"https:\/\/www.phpcodewizard.it\/mingw\/mingw.zip\" target=\"_blank\" rel=\"noreferrer noopener\">from this link<\/a>, for Linux there is no need, we will install it with a simple command from the terminal, as we will see later.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Subsequently, always and only in Windows, extract, copy and paste the mingw folder in C :, update the PATH system variable by entering c: \\ mingw \\ bin. If you have problems setting the &#8220;PATH&#8221; environment variable in Windows,<a href=\"https:\/\/youtu.be\/83SccoBYSfA\" target=\"_blank\" rel=\"noreferrer noopener sponsored nofollow\"> click here<\/a>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">However if you follow these simple steps you will do this in a second. First click with the right mouse button on the item &#8220;This PC&#8221; and then on &#8220;properties&#8221;, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-proprieta-696x450.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4042\" width=\"696\" height=\"450\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-proprieta-696x450.jpg 696w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-proprieta-300x194.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-proprieta.jpg 718w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Click on &#8220;Advanced system settings&#8221; and then on &#8220;environment variables&#8221;, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-impostazioni-di-sistema-avanzate-508x450.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4043\" width=\"508\" height=\"450\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-impostazioni-di-sistema-avanzate-508x450.jpg 508w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-impostazioni-di-sistema-avanzate-300x266.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-impostazioni-di-sistema-avanzate-768x681.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-impostazioni-di-sistema-avanzate.jpg 908w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Select, in the lower box relating to system variables, the line that highlights the content of the variable path, and then click on edit, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-variabile-path-800x354.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4044\" width=\"800\" height=\"354\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-variabile-path-800x354.jpg 800w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-variabile-path-300x133.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-variabile-path-768x340.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-variabile-path.jpg 878w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Click on the &#8220;New&#8221; button, enter the following path: c: \\ mingw \\ bin, and then on &#8220;Ok&#8221;, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-nuova-variabile-416x450.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4046\" width=\"416\" height=\"450\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-nuova-variabile-416x450.jpg 416w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-nuova-variabile-277x300.jpg 277w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/questo-pc-nuova-variabile.jpg 741w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Restart the computer for the changes made to the Path system variable to take effect.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">As for the installation of the C compiler in Linux, things are slightly simpler, this means that it all boils down to issuing the following command from the terminal: <strong>sudo apt-get install gcc<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Install_the_Parser\"><\/span><strong>Install the Parser<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now the time has come to install a software that will play an active part, together with the next one we will install, let&#8217;s talk about Bison. Basically Bison is a software that analyzes a data flow, received from the command shell or from a script, in order to recognize the grammar of a command or a construct of a programming language.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Through Bison, we will generate the parser for our interpreter. Later we will see in detail how it works, now let&#8217;s just install it.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">If you have a Windows system, you do not need to install anything, as Bison has already been integrated, by me, in the package you downloaded in the previous point. But if you have a Linux distribution, as happened with the C compiler, all we have to do is type the following command from the terminal: <strong>sudo apt-get install bison<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-pullquote is-style-large\"><blockquote><p><strong>Read more:<\/strong> <a href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-install-windows-10-on-raspberry-pi-4-e-pi-3\/\" target=\"_blank\" rel=\"noreferrer noopener\">How to install windows 10 on raspberry Pi. 4 and Pi 3<\/a><\/p><\/blockquote><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Install_the_lexical_analyzer\"><\/span><strong>Install the lexical analyzer<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Earlier I talked about Bison as the active part together with another software, for the design of an interpreter. This other software is Flex, Flex is a lexical analyzer, that is a scanner generator, able to analyze a data stream, received from the command shell or from a script, in order to recognize keywords, symbols and so on. , and perform a certain action every time it encounters a certain combination of characters, called TOKEN.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Quiet, nothing complex but, as I said for Bison, now let&#8217;s just worry about installing Flex and later you will also understand how it works.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">So, if you have a Windows system you don&#8217;t need to install anything, as Flex has already been integrated, by me, in the package you just downloaded previously. But if you have a Linux distribution, as was the case with the C and Bison compiler, all we have to do is type the following command from the terminal: <strong>sudo apt-get install flex<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verification_of_correct_software_installation\"><\/span><strong>Verification of correct software installation<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Our toolbox is ready but, we must verify that everything that has just been done is working and properly configured. Then, all you have to do is type the following commands from the Windows command prompt or, from the Linux terminal:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>gcc &#8211;version<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Press Enter, in response if you get information about the version of gcc installed, it means that the C compiler has been installed correctly, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"254\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/gcc-version-800x254.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4047\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/gcc-version-800x254.jpg 800w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/gcc-version-300x95.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/gcc-version-768x244.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/gcc-version.jpg 848w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>bison &#8211;version<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Press Enter, in response if you get information about the version of bison installed, it means that the Parser generator has been installed correctly, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/bison-version.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4048\" width=\"788\" height=\"335\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/bison-version.jpg 788w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/bison-version-300x128.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/bison-version-768x326.jpg 768w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>flex &#8211;version<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Press Enter, in response if you get information about the flex version installed, it means that the scanner generator has been installed correctly, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"789\" height=\"181\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/flex-version.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4049\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/flex-version.jpg 789w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/flex-version-300x69.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/flex-version-768x176.jpg 768w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Regular_expressions\"><\/span><strong>Regular expressions<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now we have to consider an object, widely used by developers, which is known as a &#8220;regular expression&#8221;. Surely you have already heard of regular expressions or have used them in the past.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">They are used to search and replace portions of text in strings, therefore they are widely used by all programming languages, not only that, for example, they are also used by text editors to search and replace strings in the source code.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">If you are a skilled user of regular expressions, you can also skip this paragraph and move on to the next, otherwise I suggest you continue reading as this type of object, invented back in 1950 and currently still irreplaceable, represents one of the fundamental pillars programming.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">However, in this article, I will not cover regular expressions as a whole, there are whole books that cover the subject but, we will only see the aspect concerning searching for strings within data streams, how it could be, for example, a text file.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">So, without going into too much specifics, regular expressions will be used by Flex, that is the scanner generator, to identify the TOKENs, that is the keywords of our interpreter, within a script or source file.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">It seems complex but it is not at all. When you see how Flex works, you will immediately realize the simplicity of regular expressions and their indispensable development advantage.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">I recommend that you take a look at this video tutorial, it is not necessary, but you will already have an idea of what regular expressions are and how to use them.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Learn Regular Expressions In 20 Minutes\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/rhzKDrUiJVk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><figcaption><a href=\"https:\/\/youtu.be\/rhzKDrUiJVk\" target=\"_blank\" rel=\"noreferrer noopener\">Learn Regular Expression in 20 Minutes<\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_structure_of_the_interpreter\"><\/span><strong>The structure of the interpreter<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Before moving on to the phase of implementing the vocabulary and grammar of our interpreter, we need to download one last software package. It concerns a file, compressed, prepared by me, and which contains the interpreter&#8217;s structure, composed of folders and files, already prepared ad hoc, to put you in a position to understand immediately, opening appropriate files that I will explain to you, how the design takes place actual interpreter.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Then, download <a href=\"https:\/\/www.phpcodewizard.it\/linguaggio\/linguaggio.zip\" target=\"_blank\" rel=\"noreferrer noopener\">from this link<\/a>, and extract the content, that is the interpreter, in the position on the PC that you think is most appropriate, already compiled and executable. In the following paragraphs, I will explain step by step, the contents of the files and how to customize the vocabulary and grammar, appropriately programming the lexer and the parser.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">At the end of the download, you will find a folder called &#8220;language&#8221;, which will contain this structure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/struttura-interprete-730x450.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4051\" width=\"730\" height=\"450\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/struttura-interprete-730x450.jpg 730w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/struttura-interprete-300x185.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/struttura-interprete-768x473.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/struttura-interprete.jpg 1285w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Just for the sake of completeness and, surely you have already noticed, I am using Windows 10, and I have unzipped the file lingua.zip on my desktop. I want to clarify, as I have already said previously, that everything we will do with this project in Windows 10 is also applicable to any other Linux distribution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Implementation_of_the_lexicon\"><\/span><strong>Implementation of the lexicon<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now Visual Studio Code comes into play. So, all you have to do is open the Microsoft editor, and click on &#8220;File&#8221; from the main menu and then on &#8220;Open Folder&#8221;, choose the &#8220;language&#8221; folder and click on &#8220;Select folder&#8221;.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The result is shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-open-folder-409x450.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4052\" width=\"409\" height=\"450\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-open-folder-409x450.jpg 409w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-open-folder-273x300.jpg 273w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/visual-studio-code-open-folder.jpg 520w\" sizes=\"auto, (max-width: 409px) 100vw, 409px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">in the left frame, you will notice all the contents of the &#8220;language&#8221; folder listed, now you will have to open the file &#8220;lexer.l&#8221;, by clicking on it, which will allow us to program the scanner. This file will then be fed to Flex, who will generate the perfect scanner for our interpreter.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">This file consists of four sections. In the first section, that is the one enclosed between the characters &#8220;% {&#8221; and &#8220;%}&#8221;, there are only instructions for including header files of the standard C library. In this section for the moment we will not make any changes.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In the second section, that is the one enclosed between the characters &#8220;%}&#8221; and &#8220;%%&#8221;, there are instructions that are already more interesting than the first. In fact the following code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Number       \t(&#91;0-9]+)|(&#91;0-9]+\\.&#91;0-9]+)|(\\.&#91;0-9]+)\nArgument\t((&#91;-*.\/|a-zA-Z])|(&#91;-*.\/|_a-zA-Z]&#91;-*.\/|_a-zA-Z0-9]+))\nString        \t\\\"((&#91;^\\\"]*)|(&#91;\\!]*))\\\"\nIdentifier    \t@?((&#91;a-zA-Z])|(&#91;_a-zA-Z]&#91;_a-zA-Z0-9]+))<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">They do not need comments, it is immediately clear, reading the identifiers that, everything that follows the wording <strong>Number<\/strong>, represents the regular expression used by the scanner to search for a number present in the data stream received by the scanner itself, or by the our command script. Here too, and just to recall what was previously said with regular expressions, you don&#8217;t have to make any changes. This identifier returns the <strong>NUMBER <\/strong>token to the parser.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The same thing applies to the <strong>String <\/strong>identifier, whose regular expression gives indications to the scanner to search for any strings contained in the data stream, or in our command script. This identifier returns the <strong>STRING <\/strong>token to the parser.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The same thing applies to the <strong>Argument <\/strong>identifier, whose regular expression gives indications to the scanner to search for any arguments or parameters, passed to the commands that we will create, contained in the data stream, or in our command script. This identifier returns the <strong>ARGUMENT <\/strong>token to the parser.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The same thing applies to the <strong>identifier <\/strong>keyword, whose regular expression gives indications to the scanner to search for any identifiers, such as variable names or whatever, passed to the commands we will create, contained in the data flow, or in our commands. This identifier returns the <strong>IDENTIFIER <\/strong>token to the parser.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">These lines of code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A &#91;aA]\nB &#91;bB]\nC &#91;cC]\nD &#91;dD]\nE &#91;eE]\n\u2026\n\u2026<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">make our interpreter <strong>No Case Sensitive<\/strong>. That is, the commands we will create, and everything we write in our command scripts, can be written in either lowercase or uppercase, and consequently the scanner will identify without problems, for example, the PRINT command, in each of these forms: <strong>PRINT <\/strong>which <strong>Print <\/strong>both <strong>pRiNt<\/strong>, etc \u2026<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In the third section, that is the one that contains the following instructions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>P}{R}{I}{N}{T}\t{ return PRINT; }\n{C}{L}{E}{A}{R}\t{ return CLEAR; }\n{H}{E}{L}{P}\t{ return HELP; }\n{Q}{U}{I}{T}\t{ return QUIT; }\n{E}{X}{I}{T}\t{ return EXIT; }\n{D}{I}{R}\t{ return DIR; }\n{C}{L}{S}\t{ return CLS; }\n\"(\"\t\t{ return OPENBRACKET;}\n\")\"\t\t{ return CLOSEBRACKET;}\n\",\"\t\t{ return COMMA;}<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">here are the commands we will create, in this case the commands have already been entered: PRINT, CLEAR, HELP, QUIT, EXIT, DIR, CLS. As you can see on the right of each command the TOKEN that will be sent to the parser, that is to Bison, is specified in curly brackets, but we will see later how the parser will check the grammar of the command, executing the associated code.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In the fourth section, i.e. the one that contains the following instructions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int main(int argc, char **argv) {\n    ++argv;\n    yyin = stdin;\n    if ( --argc &gt; 0 ) {\n       prompt = \"\";\n       yyin = fopen(argv&#91;0], \"r\");\n   } else {\n      printf(\"%s\", consoleMex);\n      printf(prompt);\n   }\n\n   yyparse();\n}\n\nint yywrap(void) {\n   return 0;\n}\n\nint yyerror(const char *errormsg) {\n   fprintf(stderr, \"%s\\n\", errormsg);\n   exit(1);\n}<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">it is the part of code C, which sets the scanner in motion. We are talking about that part of code that scans the data stream, through the yyparse () function, that is our command script, recognizes the TOKEN specified in the third section, and sends them to the parser. In the next paragraph we will see how, the latter recognizes the grammar of a command, and executes the associated C code.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Before moving on to the description of the parser, I want to make a clarification. The part of the code that follows the instruction: <strong>yyin = stdin;<\/strong> serves to execute the commands or instructions that we will create, in two different environments. That is, if when you run the interpreter, you pass a file, our command script, as an argument, then the scanner will read the script and will consider it as a data stream to be verified. if, on the other hand, when you run the interpreter, you do not pass any arguments, then the scanner will open a command shell, and everything you type from the keyboard will be checked by the scanner. Consequently, a command shell, our terminal, will be displayed with an initial message, and from there on, everything you type will be processed by the scanner and considered as an incoming data stream to be managed.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">I reiterate that in this section, for the moment, you must not make any changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Grammar_implementation\"><\/span><strong>Grammar implementation<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now let&#8217;s get to the heart of the discussion, we&#8217;re about to see how a parser works. For the moment, still in the left frame, open the \u201cparser.y\u201d file by clicking on it. This file consists of several sections, but the most interesting is this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>commands:  \n         printstmt \n       | dirstmt\n       | helpstmt\n       | quitstmt\n       | clsstmt\n       | clearstmt\n       ;<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">the identifiers that follow the &#8220;commands&#8221; directive are nothing more than names associated with the grammar of each command created. For example, to the PRINT command I have associated the name print + stmt which stands for statement (statement), but you can give the name you want. So, the DIR command (list of folders and files, very well known command \u2026 that you will have used a thousand times) I have associated the name dir + stmt, etc \u2026<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Any other command must be added in this section by specifying the name that you will associate with the grammar. But we will see it in a while.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">All the code following the &#8220;commands&#8221; declaration is the actual grammar itself, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>printstmt:\n   PRINT STRING { \n      printStatement($2);    \n      if(strlen(prompt) &gt; 0) printf(\"\\n\");\n   }\n;<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">This code is of a disarming simplicity, but let&#8217;s see in detail what it does. First of all, the &#8220;printstmt:&#8221; declaration indicates that the following code is associated with the &#8220;printstmt&#8221; directive called up in &#8220;commands&#8221; and checked cyclically every time it is repeated within the script or typed in the command shell.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">I token PRINT STING, specificano la grammatica del comando PRINT. Cio\u00e8 il comando PRINT \u00e8 costituito dal token PRINT + un argomento, che in questo caso \u00e8 una stringa, STRING. Ad esempio, potremmo digitare qualcosa del genere: <strong>print \u201cHello world\u201d<\/strong>.The PRINT STING tokens specify the grammar of the PRINT command. That is, the PRINT command consists of the PRINT token + an argument, which in this case is a string, STRING. For example, we could type something like this: <strong>print &#8220;Hello world&#8221;<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The code that follows the PRINT grammar, that is: printStatement ($ 2); executes the printStatement function that you will find in the \u201cstatements\u201d subfolder located under \u201clanguage\u201d, remember?<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Solo una precisazione, circa l\u2019argomento <strong>$2<\/strong>, della function <strong>printStatement. <\/strong>Nella dichiarazione della grammatica del comando PRINT e cio\u00e8: PRINT STRING, il parser associa ad ogni TOKEN presente, un progressivo preceduto dal simbolo <strong>$. <\/strong>In questo caso a PRINT \u00e8 associato $1 e a STRING \u00e8 associato $2. Questo significa che quando viene richiamata la function <strong>printStatement, <\/strong>il parametro <strong>$2 <\/strong>conterr\u00e0 la stringa passata come argomento a PRINT, e cos\u00ec via, per cui potremmo avere anche un <strong>$3<\/strong>, un <strong>$4 <\/strong>e cos\u00ec via. Parliamo di parametri, che compongono la grammatica del comando e che potrebbero contenere stringhe, numeri e quant\u2019altro.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Just a clarification, about the $ 2 argument, of the printStatement function. In the declaration of the grammar of the PRINT command, that is: PRINT STRING, the parser associates to each TOKEN present, a progressive preceded by the symbol $. In this case $ 1 is associated with PRINT and $ 2 is associated with STRING. This means that when the printStatement function is called, the $ 2 parameter will contain the string passed as an argument to PRINT, and so on, so we could also have a $ 3, a $ 4, and so on. We are talking about parameters, which make up the grammar of the command and which may contain strings, numbers and so on.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Let&#8217;s go back to the PRINT command. In this case, and for each command, you will create two files in the &#8220;statements&#8221; folder, that is printstmt.c and printstmt.h, the first that contains the actual code of the print command and the second is nothing but the header file as the C language provides.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Let&#8217;s see what the printstmt.c file contains:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include \"..\/global.h\"\n#include &lt;string.h&gt;\n#include \"printstmt.h\"\n\nvoid printStatement(const char* stringLiteral) {\n   printf(\"%s\", stringLiteral);\n}<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Here we see that, once the grammar is checked, the parser executes this piece of code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void printStatement(const char* stringLiteral) {\n   printf(\"%s\", stringLiteral);\n}<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">And the stringLiteral parameter, contains the content passed by the $ 2 argument. Therefore each command will be composed exactly as PRINT. So the PRINT command does nothing but print on the screen the content on the screen, passed by the STRING token, and associated to $ 2 by the parser, with this instruction: printf (&#8220;% s&#8221;, stringLiteral);<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">To you, I leave the task of seeing what has been done for the other commands that you will find described in parser, y, as regards the grammar and, in the relative files contained in the &#8220;statements&#8221; subfolder, as regards the action associated with each command.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Compilation_of_the_interpreter\"><\/span><strong>Compilation of the interpreter<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">the task related to programming the commands and the relative shell is finished, now we have to see our interpreter running and start executing some commands from the shell or script file.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The first necessary operation is to compile our interpreter, not only that, the scanner and the parser must also be generated. Do you remember what was said previously with Flex and Bison?<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In this regard I have implemented a make file for both windows and Linux environment. The two files can be found under the root of the project, that is the &#8220;language&#8221; folder.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">So, just run the make.bat file for windows and make.sh for linux from the command prompt or linux terminal respectively. That&#8217;s all, the make file will generate an executable called &#8220;console.exe&#8221;, which you can rename to your liking, which is the interpreter. If you run console.exe without arguments, it opens only the interpreter command prompt and everything you type will be directly interpreted by the on-screen scanner, while if you pass a file, such as the script.prg file, to console.exe, all of it contained within the script will be interpreted by the scanner.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">It should be noted that all the other commands, I am talking about: CLEAR, HELP, QUIT, EXIT, DIR, CLS, do not have a corresponding \u201c.c\u201d file in the \u201cstatements\u201d folder. This is because it is not always necessary to associate the action of a command in a separate file. But as for these commands, I preferred to associate the action of the command directly within the grammar, that is, in the parser.y file. This technique is recommended when the action to be associated is executable with a few lines of code.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Just for the sake of clarity, I propose the code associated with the DIR command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dirstmt:\n         DIR ARGUMENT {  \n            if(strlen(prompt) &gt; 0) {\n               char *dest;\n               char *src;\n               strcpy(dest, \"dir \");\n\t   strcpy(src, $2);\n\t   strcat(dest, src);\n\t   system(dest); \n\t}\n         }\n         | DIR { \n            if(strlen(prompt) &gt; 0) system(\"dir *.*\"); \n         }\n  ;<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">As you can see, this command works only within the shell, this is evident from the fact that the instructions are all inserted inside: <strong>if (strlen (prompt)&gt; 0)<\/strong>. The command simply executes the &#8220;dir *. *&#8221; Command if it has no arguments, otherwise it executes DIR with the argument contained within the $ 2 variable. $ 2 could be anything, for example, * .prg, i.e. anything you type from shell. Everything is done through the &#8220;system&#8221; function of the standard C library, which allows you to launch commands from the operating system.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Note that the command, in the parser.y file, has two variants of the grammar, namely DIR ARGUMENT and DIR. The two grammars are interpreted and associated with the &#8220;|&#8221; character, that is to say either this grammar: DIR ARGUMENT or this other DIR.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span><strong>Conclusion<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">I&#8217;ll try to summarize the process of creating another command. So, first you have to modify the lexer.l file, and add, immediately after this instruction: {C} {L} {S} {return CLS; } your command, for example: {M} {Y} {C} {O} {M} {MA} {N} {D}  {return MYCOMMAND; }.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Next, you need to edit the parser file, y and, add the following statement right after: | clearstmt, at line 37, the declaration that will identify the statement relating to the MYCOMAND token, namely: | mycomandostmt.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Add, before the &#8220;%%&#8221; character at the end of the file, a block identical to this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>miocomandostmt:\n       MIOCOMANDO { \n          \/\/ instructions in pure philosophy C\n      }\n ;<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">in case you have decided to make the action corresponding to the grammar of MY COMMAND in a separate .c file, then you have to add two files in the &#8220;statements&#8221; folder, namely: mycomandostmt.c and mycomandostmt.h, and add after the line gcc -w -c statements \/ printstmt.c -o statements \/ printstmt.o, the following statement: gcc -w -c statements \/ mycomandostmt.c -o statements \/ mycomandostmt.o, and modify the statement: gcc -w -o console.exe global.o statements \/ printstmt.o y.tab.o lex.yy.o, like so: gcc -w -o console.exe global.o statements \/ printstmt.o statements \/ mycomandostmt.o y.tab .o lex.yy.o leaving the rest unchanged.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The same changes must also be made to the make.sh file, for linux environment, in the same way as what was done in make.bat. At this point you just have to run &#8220;make.bat&#8221; or &#8220;make.sh&#8221; in Linux from the command prompt, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/make-800x402.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4061\" width=\"800\" height=\"402\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/make-800x402.jpg 800w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/make-300x151.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/make-768x386.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/make.jpg 975w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">At the end of the execution of the make file, the interpreter will automatically open &#8220;by running the file&#8221; console.exe &#8220;, type your commands directly from the shell, or with console.exe script.prg, you will make the interpreter execute the commands stored in inside the script.prg file, as shown in the figure:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/Interprete-800x229.jpg\" alt=\"come creare un linguaggio di programmazione\" class=\"wp-image-4062\" width=\"800\" height=\"229\" srcset=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/Interprete-800x229.jpg 800w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/Interprete-300x86.jpg 300w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/Interprete-768x220.jpg 768w, https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/Interprete.jpg 975w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">I hope I have been of help and have dispelled all your doubts on a relatively difficult subject.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"How Are Programming Languages Created | Evolution Of Code\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/yKyOWBkf3io?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><figcaption><a href=\"https:\/\/youtu.be\/yKyOWBkf3io\" target=\"_blank\" rel=\"noreferrer noopener\">How Are programming languages Made?<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many developers ask themselves this question: &#8220;How to design a programming language?&#8221;, Or, &#8220;What is hidden behind a command of any language?&#8221;. Read this article and you will understand how to develop your own interpreter.<\/p>\n","protected":false},"author":1,"featured_media":4085,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[268,1059],"tags":[5090,2810,2941,2937,5181,2943,2945,3044,2839,2843,5184,2939],"class_list":["post-4073","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles-en","category-development","tag-ai-en","tag-development-en","tag-how-en","tag-how-to-en","tag-microsoft-en","tag-mouse-en","tag-software-en","tag-system-en","tag-to-en","tag-video-en","tag-visual-studio-code-en","tag-windows-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How Create Your Own Programming Language - Antonio Lamorgese<\/title>\n<meta name=\"description\" content=\"Many developers ask themselves: &quot;How to create your own programming language?&quot;. Read this article and you will understand.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"how to create a programming language\" \/>\n<meta property=\"og:description\" content=\"Many developers ask themselves this question: &quot;How to design a #programming language?&quot;, Or, &quot;What is hidden behind a command of any #language?&quot;. Find out more to understand how to develop your own #interpreter.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/\" \/>\n<meta property=\"og:site_name\" content=\"Antonio Lamorgese\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-21T18:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-20T08:57:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Antonio Lamorgese\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"how to create a programming language\" \/>\n<meta name=\"twitter:description\" content=\"Many developers ask themselves this question: &quot;How to design a #programming language?&quot;, Or, &quot;What is hidden behind a command of any #language?&quot;. Find out more to understand how to develop your own #interpreter.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@AntonioLamorge3\" \/>\n<meta name=\"twitter:site\" content=\"@AntonioLamorge3\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Lamorgese\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/\"},\"author\":{\"name\":\"Antonio Lamorgese\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/#\\\/schema\\\/person\\\/264cf3af38edc93a3362a4c47ec5b2f0\"},\"headline\":\"How Create Your Own Programming Language\",\"datePublished\":\"2020-12-21T18:00:00+00:00\",\"dateModified\":\"2022-10-20T08:57:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/\"},\"wordCount\":4014,\"publisher\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/#\\\/schema\\\/person\\\/264cf3af38edc93a3362a4c47ec5b2f0\"},\"image\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/how-to-design-a-programming-language.jpg\",\"keywords\":[\"AI\",\"development\",\"how\",\"how to\",\"microsoft\",\"mouse\",\"software\",\"system\",\"to\",\"video\",\"Visual Studio Code\",\"windows\"],\"articleSection\":[\"Blog Articles\",\"Development\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/\",\"url\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/\",\"name\":\"How Create Your Own Programming Language - Antonio Lamorgese\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/how-to-design-a-programming-language.jpg\",\"datePublished\":\"2020-12-21T18:00:00+00:00\",\"dateModified\":\"2022-10-20T08:57:24+00:00\",\"description\":\"Many developers ask themselves: \\\"How to create your own programming language?\\\". Read this article and you will understand.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/how-to-design-a-programming-language.jpg\",\"contentUrl\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/how-to-design-a-programming-language.jpg\",\"width\":800,\"height\":450,\"caption\":\"how to create a programming language\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/how-to-create-a-programming-language\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog Articles\",\"item\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/en\\\/category\\\/articles-en\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Create Your Own Programming Language\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/#website\",\"url\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/\",\"name\":\"Antonio Lamorgese\",\"description\":\"Il web e i suoi strumenti operativi\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/#\\\/schema\\\/person\\\/264cf3af38edc93a3362a4c47ec5b2f0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/#\\\/schema\\\/person\\\/264cf3af38edc93a3362a4c47ec5b2f0\",\"name\":\"Antonio Lamorgese\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/ChiSono.png\",\"url\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/ChiSono.png\",\"contentUrl\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/ChiSono.png\",\"width\":120,\"height\":130,\"caption\":\"Antonio Lamorgese\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/ChiSono.png\"},\"description\":\"Amministratore di rete e sviluppatore. Dopo anni di esperienza nel settore, ho ideato un sistema di gestione dati MYSQL in PHP senza scrivere una sola riga di codice.&nbsp;Scopri di pi\u00f9....\",\"sameAs\":[\"https:\\\/\\\/www.Phpcodewizard.it\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/antonio-lamorgese-660735190\\\/\",\"https:\\\/\\\/pinterest.it\\\/antoniolamorgese9711\\\/\",\"https:\\\/\\\/x.com\\\/AntonioLamorge3\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/antoniolamorgese\",\"https:\\\/\\\/tumblr.com\\\/blog\\\/phpcodewizard\"],\"url\":\"https:\\\/\\\/www.phpcodewizard.it\\\/antoniolamorgese\\\/author\\\/antonio-lamorgese\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How Create Your Own Programming Language - Antonio Lamorgese","description":"Many developers ask themselves: \"How to create your own programming language?\". Read this article and you will understand.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/","og_locale":"it_IT","og_type":"article","og_title":"how to create a programming language","og_description":"Many developers ask themselves this question: \"How to design a #programming language?\", Or, \"What is hidden behind a command of any #language?\". Find out more to understand how to develop your own #interpreter.","og_url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/","og_site_name":"Antonio Lamorgese","article_published_time":"2020-12-21T18:00:00+00:00","article_modified_time":"2022-10-20T08:57:24+00:00","og_image":[{"width":800,"height":450,"url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg","type":"image\/jpeg"}],"author":"Antonio Lamorgese","twitter_card":"summary_large_image","twitter_title":"how to create a programming language","twitter_description":"Many developers ask themselves this question: \"How to design a #programming language?\", Or, \"What is hidden behind a command of any #language?\". Find out more to understand how to develop your own #interpreter.","twitter_image":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg","twitter_creator":"@AntonioLamorge3","twitter_site":"@AntonioLamorge3","twitter_misc":{"Scritto da":"Antonio Lamorgese","Tempo di lettura stimato":"25 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#article","isPartOf":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/"},"author":{"name":"Antonio Lamorgese","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/#\/schema\/person\/264cf3af38edc93a3362a4c47ec5b2f0"},"headline":"How Create Your Own Programming Language","datePublished":"2020-12-21T18:00:00+00:00","dateModified":"2022-10-20T08:57:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/"},"wordCount":4014,"publisher":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/#\/schema\/person\/264cf3af38edc93a3362a4c47ec5b2f0"},"image":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#primaryimage"},"thumbnailUrl":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg","keywords":["AI","development","how","how to","microsoft","mouse","software","system","to","video","Visual Studio Code","windows"],"articleSection":["Blog Articles","Development"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/","url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/","name":"How Create Your Own Programming Language - Antonio Lamorgese","isPartOf":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#primaryimage"},"image":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#primaryimage"},"thumbnailUrl":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg","datePublished":"2020-12-21T18:00:00+00:00","dateModified":"2022-10-20T08:57:24+00:00","description":"Many developers ask themselves: \"How to create your own programming language?\". Read this article and you will understand.","breadcrumb":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#primaryimage","url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg","contentUrl":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2020\/12\/how-to-design-a-programming-language.jpg","width":800,"height":450,"caption":"how to create a programming language"},{"@type":"BreadcrumbList","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/how-to-create-a-programming-language\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/"},{"@type":"ListItem","position":2,"name":"Blog Articles","item":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/en\/category\/articles-en\/"},{"@type":"ListItem","position":3,"name":"How Create Your Own Programming Language"}]},{"@type":"WebSite","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/#website","url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/","name":"Antonio Lamorgese","description":"Il web e i suoi strumenti operativi","publisher":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/#\/schema\/person\/264cf3af38edc93a3362a4c47ec5b2f0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":["Person","Organization"],"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/#\/schema\/person\/264cf3af38edc93a3362a4c47ec5b2f0","name":"Antonio Lamorgese","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2019\/06\/ChiSono.png","url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2019\/06\/ChiSono.png","contentUrl":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2019\/06\/ChiSono.png","width":120,"height":130,"caption":"Antonio Lamorgese"},"logo":{"@id":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-content\/uploads\/2019\/06\/ChiSono.png"},"description":"Amministratore di rete e sviluppatore. Dopo anni di esperienza nel settore, ho ideato un sistema di gestione dati MYSQL in PHP senza scrivere una sola riga di codice.&nbsp;Scopri di pi\u00f9....","sameAs":["https:\/\/www.Phpcodewizard.it\/","https:\/\/www.linkedin.com\/in\/antonio-lamorgese-660735190\/","https:\/\/pinterest.it\/antoniolamorgese9711\/","https:\/\/x.com\/AntonioLamorge3","https:\/\/www.youtube.com\/user\/antoniolamorgese","https:\/\/tumblr.com\/blog\/phpcodewizard"],"url":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/author\/antonio-lamorgese\/"}]}},"permalink_manager":null,"_links":{"self":[{"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/posts\/4073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/comments?post=4073"}],"version-history":[{"count":0,"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/posts\/4073\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/media\/4085"}],"wp:attachment":[{"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/media?parent=4073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/categories?post=4073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.phpcodewizard.it\/antoniolamorgese\/wp-json\/wp\/v2\/tags?post=4073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}