• Nie Znaleziono Wyników

Towards language-parametric semantic editor services based on declarative type system specifications

N/A
N/A
Protected

Academic year: 2021

Share "Towards language-parametric semantic editor services based on declarative type system specifications"

Copied!
3
0
0

Pełen tekst

(1)

Delft University of Technology

Towards language-parametric semantic editor services based on declarative type system

specifications

Pelsmaeker, Daniel A.A.; Van Antwerpen, Hendrik; Visser, Eelco DOI

10.1145/3359061.3362782

Publication date 2019

Document Version Final published version Published in

SPLASH Companion 2019 - Proceedings Companion of the 2019 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications

Citation (APA)

Pelsmaeker, D. A. A., Van Antwerpen, H., & Visser, E. (2019). Towards language-parametric semantic editor services based on declarative type system specifications. In Y. Smaragdakis (Ed.), SPLASH Companion 2019 - Proceedings Companion of the 2019 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity (pp. 19-20). (SPLASH Companion 2019 - Proceedings Companion of the 2019 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity). Association for Computing Machinery (ACM). https://doi.org/10.1145/3359061.3362782

Important note

To cite this publication, please use the final published version (if applicable). Please check the document version above.

Copyright

Other than for strictly personal use, it is not permitted to download, forward or distribute the text or part of it, without the consent of the author(s) and/or copyright holder(s), unless the work is under an open content license such as Creative Commons. Takedown policy

Please contact us and provide details if you believe this document breaches copyrights. We will remove access to the work immediately and investigate your claim.

This work is downloaded from Delft University of Technology.

(2)

Towards Language-Parametric Semantic Editor

Services Based on Declarative Type System

Specifications

Daniel A. A. Pelsmaeker

Delft University of Technology Delft, The Netherlands d.a.a.pelsmaeker@tudelft.nl

Hendrik van Antwerpen

Delft University of Technology Delft, The Netherlands h.vanantwerpen@tudelft.nl

Eelco Visser

Delft University of Technology Delft, The Netherlands

e.visser@tudelft.nl

Abstract

New programming languages often lack good IDE support, as developing advanced semantic editor services takes ad-ditional effort. In previous work we discussed the opera-tional requirements of a constraint solver that leverages the declarative type system specification of a language to pro-vide language-parametric semantic editor services. In this work we describe the implementation of our solver as a two stage process: inference and search. An editor-service spe-cific search strategy determines how and where the search is conducted, and when it terminates. We are currently im-plementing and evaluating this idea.

CCS Concepts • Software and its engineering → Se-mantics.

Keywords constraint programming, semantics, constraint solving, Spoofax, Statix, editor services

ACM Reference Format:

Daniel A. A. Pelsmaeker, Hendrik van Antwerpen, and Eelco Visser. 2019. Towards Language-Parametric Semantic Editor Services Based on Declarative Type System Specifications. InProceedings of the 2019 ACM SIGPLAN International Conference on Systems, Program-ming, Languages, and Applications: Software for Humanity (SPLASH Companion ’19), October 20–25, 2019, Athens, Greece. ACM, New York, NY, USA,2pages.https://doi.org/10.1145/3359061.3362782

1

Introduction

When creating a new programming language, it takes ad-ditional effort to provide good editor services for the lan-guage in an IDE, which is important for effective comprehen-sion, navigation, and refactoring of the code. While existing work addresses the problem of supporting a language across multiple IDEs, such as using Language Server Protocol [1],

Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for third-party components of this work must be honored. For all other uses, contact the owner /author(s).

SPLASH Companion ’19, October 20–25, 2019, Athens, Greece © 2019 Copyright held by the owner/author(s).

ACM ISBN 978-1-4503-6992-3/19/10. https://doi.org/10.1145/3359061.3362782 t y p e O f ( s , e ) = ty : - e mat ch { True () -> BOOL == ty . And ( e1 , e2 ) -> t y p e O f ( s , e1 ) == BOOL , t y p e O f ( s , e2 ) == BOOL , BOOL == ty . Call (x , es ) -> M e t h o d { x } in s == M E T H O D ( targs , tret ) , t y p e s O f (s , es ) == targs , tret == ty . }

Figure 1. A single Statix typing rule for expressions, used to type checkTrue, conjunction, and method calls.

Monto [3], AESI [6], and MagpieBridge [4], none of them address the difficulty of implementing the editor services.

In previous work [7] we argued that we can specify ad-vanced semantic editor services as constraint problems. Con-straints allow us to separate the declarative specification of a problem from the operational semantics needed to solve them. Currently, our constraint solver can only use the type system specification to verify the correctness of a program. In this work we outline our ideas for extending the solver, such that it will be able to use the type system specification for advanced semantic editor services such as semantic code completion. We are currently implementing this extension to the Statix constraint solver, and evaluating its capabilities and performance.

2

Architecture

In the Spoofax language workbench [2] the static type sys-tem of a programming language can be specified using Statix, a meta-language for the declarative specification of static semantics [9]. It models the static semantics of a language as a constraint problem, and includes name binding and resolu-tion by asserting structure and querying ascope graph [5,8]. A typing rule for Java expressions is shown in Figure1. Other rules would assert scopes and edges in the scope graph. Figure2shows a small Java example program and the cor-responding scope graph, where scope 0 is the root scope in

(3)

SPLASH Companion ’19, October 20–25, 2019, Athens, Greece Daniel A. A. Pelsmaeker, Hendrik van Antwerpen, and Eelco Visser p u b l i c class C { b o o l e a n m ( int x , int y ) { r e t u r n ( x == y ) && $Exp } int f () { r e t u r n 42; } } 1 0 P 2 P 3 P C : class(1) :

m : (int, int) → bool : f : () → int : x : int : y : int :

Figure 2. Incomplete example Java program with a place-holder $Exp, and its corresponding scope graph.

which the classC is declared, scope 1 is the scope within the class with the declarations of methodsm and f, and scopes 2 and 3 are the bodies of those methods respectively.

The current implementation of the Statix solver is deter-ministic: it only applies a rule if it matches the given program construct, and does not do back-tracking. The algorithm uses the specification to simplify constraints until only core con-straints remain, which are solved through unification and scope graph resolution.

We propose to extend the solver to include a limited form of search and back-tracking. The solver will perform a two-stage process: inference and search. In the first two-stage it will perform inference by simplifying and unifying constraints until it terminates or gets stuck. In the second stage asearch strategy determines whether it performs a search by refining one of the constraints, splitting the search tree into multiple branches. The solver then loops and performs inference on each of the resulting branches. Branches that are not satisfi-able are discarded. Other branches may yield a solution or get stuck, and the cycle repeats.

In Statix, syntaxmatch constraints are refined into their constituent branches, and scope graphquery constraints are refined into the various declarations that the queries could resolve to. The search strategy, which is specific to the editor service, determines which constraints are refined, and whether the algorithm continues the search. It employs these kinds of search:

• Non-deterministic — Refines a constraint • Deterministic — Refines the only branch

• None — Performs simplification and unification only

Performing a non-deterministic search on a constraint variable will yield all solutions that are found after refining only one level deep. This is useful for semantic code comple-tion, where we return each of the solutions as completion proposals to the user. Any constraint variables in the solu-tion that are not ground are replaced by placeholders in the proposed syntax. For example, in Figure2, invoking comple-tion on the placeholder$Exp would suggest: true, $Exp && $Exp, and m($Exps).

Deterministic search is useful to refine constraints for which there is only one possibility. For example, a deter-ministic search on the constraint variable representing the arguments to a methodm(e) results in the exact number of arguments the method expectsm($Exp, $Exp). If instead we would have performed a non-deterministic search, we would also get all possible values for the method arguments.

3

Conclusion

Given a type system specification of a language, we believe many useful semantic editor services can be implemented in a language-parametric way by just varying the search strategy being used. This will allow complex editor services to be supported with little to no extra effort from the lan-guage developer. We are in the process of implementing and evaluating the new implementation of the Statix solver. This will also gain us insight into its limitations and which editor services can be specified using our techniques.

References

[1] Hendrik Bünder. 2019. Decoupling Language and Editor - The Impact of the Language Server Protocol on Textual Domain-Specific Languages. Inmodelsward. 129–140. https://doi.org/10.5220/0007556301290140 [2] Lennart C. L. Kats and Eelco Visser. 2010. The Spoofax language

work-bench: rules for declarative specification of languages and IDEs. In OOPSLA. 444–463. https://doi.org/10.1145/1869459.1869497

[3] Sven Keidel, Wulf Pfeiffer, and Sebastian Erdweg. 2016. The IDE porta-bility problem and its solution in Monto. InSLE. 152–162.

[4] Linghui Luo, Julian Dolby, and Eric Bodden. 2019. MagpieBridge: A General Approach to Integrating Static Analyses into IDEs and Editors (Tool Insights Paper). InECOOP. https://doi.org/10.4230/LIPIcs.ECOOP. 2019.21

[5] Pierre Néron, Andrew P. Tolmach, Eelco Visser, and Guido Wachsmuth. 2015. A Theory of Name Resolution. InESOP. 205–231. https://doi.org/ 10.1007/978-3-662-46669-8_9

[6] Daniel A. A. Pelsmaeker. 2018.Portable Editor Services. Master’s thesis. [7] Daniel A. A. Pelsmaeker, Hendrik van Antwerpen, and Eelco Visser.

2019. Towards Language-Parametric Semantic Editor Services Based on Declarative Type System Specifications (Brave New Idea Paper). In ECOOP. https://doi.org/10.4230/LIPIcs.ECOOP.2019.26

[8] Hendrik van Antwerpen, Pierre Néron, Andrew P. Tolmach, Eelco Visser, and Guido Wachsmuth. 2016. A constraint language for static semantic analysis based on scope graphs. InPEPM. 49–60. https://doi.org/10. 1145/2847538.2847543

[9] Hendrik van Antwerpen, Casper Bach Poulsen, Arjen Rouvoet, and Eelco Visser. 2018. Scopes as types.PACMPL 2, OOPSLA (2018). https: //doi.org/10.1145/3276484

Cytaty

Powiązane dokumenty

WebDSL provides an integrated way to specify access control, where policies are combined in the rules, data is integrated with the application, and accessible for administration.

The result of the proof is in this way general: it holds for all types of formal parthood relations since all types of formal parthood relations have to meet the postulates

Za niektóre jednak nudne chwile i tęsknotę za ziemią rodzinną wynagrodziło mi poznanie się tutaj z Korzeniowskim, profesorem literatury polskiej z Krzemieńca,

Całokształtem swej formy folklor oparty jest na tradycji i twórczości ludowej realizowanej przez grupy lub osoby indywidualne.. Został on też uznany jako wyrażający

To demonstrate dynamic electromechanical modulation of the ionic current at the true single-molecule level, we trapped individual peptides, one at a time, in the FraC nanopore

Obecnie w przemyśle ga- zowniczym do obliczania współczynnika ściśliwości obo- wiązują porównywalne ze sobą dwie metody ISO: metoda SGERG-88 [9], oparta na wirialnym

W świetle wymie- nionych wcześniej czynników ryzyka u tych 4 osób zaobserwowano wspólne cechy, które mogły wpłynąć na wystąpienie upadku, tj.: zespół bólowy,

• używania wspólnego znaku towarowego lub znaku gwarancyjnego przez uprawnionego w sposób powodujący ryzyko wprowadzenia odbiorców w błąd co do charakteru lub znaczenia