Progettazione e Sviluppo in Rouge di un Syntax Highlighter per un Linguaggio Domain Specific
View/ Open
Author
Cattaneo, Pietro <1988>
Date
2023-09-15Data available
2023-09-21Abstract
Lo scopo di questa prova finale è stata la progettazione e lo sviluppo di un evidenziatore di sintassi (Syntax Highlighter) per il Linguaggio Domain Specific RML.
Questo obiettivo è stato raggiunto utilizzando Rouge, un syntax highlighter open-source ed estendibile che è scritto nel linguaggio Ruby ed è di fatto la componente di default per l’highlight della sintassi utilizzata dalle pagine GitHub contenenti frammenti di codice. La peculiarità di Rouge è che, a differenza di evidenziatori di sintassi che si basano su tecniche euristiche e di pattern matching, il core di questo strumento è costituito da un Lexer che permette di definire Automi a Pila (Pushdown Automata o PDA). Grazie a questa proprietà, è possibile definire lexer che hanno un potere espressivo paragonabile a quello di un parser e che, quindi, possono gestire contesti testuali annidati ed evidenziare alcuni tipi di errore di sintassi. Sebbene il lavoro di questa tesi sia consistito nella progettazione e sviluppo di un syntax highlighter per un linguaggio specifico (RML), questo documento è stato organizzato in modo da fornire un'utile guida per chi volesse estendere Rouge con altri linguaggi e corrispondenti sintassi. Per tale motivo, vengono considerate tutte le fasi che permettono la definizione di un syntax highlighter in Rouge, che vanno dall’analisi dello strumento, la sua progettazione, la traduzione in codice del lexer della grammatica del linguaggio, fino all’integrazione con il repository GitHub di Rouge che ospita il progetto principale. Il repository di Rouge è ospitato su GitHub per coordinare lo sviluppo distribuito di nuove caratteristiche, come l'aggiunta di lexer per nuovi tipi di sintassi; quindi, per contribuire attivamente al progetto Rouge e permettere l'uso del lexer di RML ad altri utenti, sono stati seguiti tutti i passi necessari per integrare il progetto di questa tesi con Rouge, partendo dall'operazione iniziale di fork del repository GitHub, fino alla pull request finale. The aim of this final project is the design and development of a syntax highlighter for the Domain Specific RML language.
This goal was achieved by using Rouge, an open-source and extensible syntax highlighter that is written in the Ruby programming language and is in fact the default syntax highlighting component used by GitHub pages containing code snippets. The peculiarity of Rouge is that, unlike syntax highlighters that are based on heuristic and pattern matching techniques, the core of this tool is made up of a Lexer that allows you to define Stack Automata (Pushdown Automata or PDA). Thanks to this property, it is possible to define lexers which have an expressive power comparable to that of a parser and which, therefore, can handle nested textual contexts and highlight some types of syntax errors. Although the work of this thesis consisted in the design and development of a syntax highlighter for a specific language (RML), this document has been organized in such a way as to provide a useful guide for those wishing to extend Rouge with other languages and corresponding syntaxes. For this reason, all the phases that allow the definition of a syntax highlight in Rouge are considered, ranging from the analysis of the tool, its design, the translation of the language grammar into code of the lexer, up to the integration with the GitHub Rouge's repository hosting the main project. The official Rouge repository is hosted on GitHub to coordinate the distributed development of new features, such as adding lexers for new types of syntax; therefore, to actively contribute to the Rouge project and allow the use of the RML lexer to other users, all the steps necessary to integrate the project of this thesis with Rouge have been followed, starting from the initial fork operation of the GitHub repository, up to the final pull request.
Type
info:eu-repo/semantics/bachelorThesisCollections
- Laurea Triennale [2447]