Skip to content

๐Ÿ‘€โ–ถ๏ธ [archived] Exploring the Programming Languages Engineering, Domain-Specific Language, Integration with the Eclipse Debug UI, and the Fundamental Features of an Interpreter and Debugger.

Notifications You must be signed in to change notification settings

kimtth/small-dsl-eclipse-debug

Repository files navigation

smallD ๐Ÿงธ

Language Engineering as a Toy Language โ€” the name is Small D. Integrated with the Eclipse Debug UI ๐Ÿž, it provides a simple interpreter and debugger.

Overview ๐Ÿ”

  1. org.xtext.labs.mydsl.interpreter is fully developed and designed based on parsing results. Itโ€™s not a built-in feature of the Xtend framework.
  2. The interpreter is integrated with the Eclipse Debug UI โ€” this is an independent module, not relying on Xtend.
  3. Code editor functionalities are provided and fixed by the Xtend framework.
  4. Minimap view and deployment are implemented via Eclipse plugin development.
  5. ANTLR parses the language definition file at org.xtext.labs.mydsl/src/org/xtext/labs/Mydsl.xtext. Once parsing is complete and the AST is generated, it becomes the foundation for all language customization and engineering.

What and Why is small D? โ“

Small D is a toy language for exploring Language Engineering.
โ€œDโ€ stands for DSL (Domain-Specific Language). Unlike general-purpose languages like C or Java, DSLs are tailored for specific tasks or domains.

Normally, implementing a new language doesnโ€™t make sense for time- or budget-constrained projects. But sometimes, it's necessary. Unfortunately, simple and practical references are hard to find, and most DSLs are proprietary, making examples rare.

Even finding debugger documentation often leads to low-level gdb or obscure references โ€” not practical for newcomers. Thatโ€™s why I created a small language with essential IDE features for learning purposes.

I hope it helps you, too. ๐Ÿ™Œ

Blueprint ๐Ÿ—บ๏ธ

roadmap

  • What: Lexer ๐Ÿช“ โ†’ Parser ๐Ÿ“œ โ†’ Interpreter ๐Ÿง  โ†’ Debuggable Interpreter ๐Ÿ› โ†’ Eclipse Debug UI ๐ŸŽ›๏ธ
  • Intermediate Products: Token (lexer) โ†’ AST (parser) โ†’ Call Stack & Symbol Table (interpreter)
  • How: Using Xtext Framework ๐Ÿ› ๏ธ + Custom Implementations ๐Ÿ’ก

Features of the small D Project ๐ŸŒŸ

1. small DSL language with Xtext โœ๏ธ

Features:

  • Error Checking
  • Semantic/Syntax Coloring
  • Outline View
  • Hover Tooltips
  • Auto-completion (Proposal)
  • Scoping, Cross-referencing, Labeling
  • Minimap View
  • Formatting, ๐Ÿ› ๏ธ Quick Fix
  • Folding, ๐Ÿ“Œ Go-To Declaration

๐Ÿงฑ Xtext documentation is sparse, sometimes outdated, and the community is small โ€” but it's still better than nothing.

2. Debuggable Interpreter & Debugger ๐Ÿ›

  • Features a ๐Ÿงฎ call stack, ๐Ÿงพ symbol table, and ๐Ÿงฌ AST
  • Interpreter can suspend โธ๏ธ and resume โ–ถ๏ธ based on commands

3. Integration with Eclipse Debug UI ๐ŸŽ›๏ธ

  • Communication with Eclipse Debug UI:
    • Request Socket <=> Response (data)
    • Event Socket

debugui

4. Eclipse Product for Deploying ๐Ÿš€

  • Use the Eclipse Product export wizard ๐Ÿง™โ€โ™‚๏ธ
  • Project: org.xtext.labs.mydsl.product
  • File: DSLDeveloper.product

๐Ÿ› ๏ธ For installers:

Use Inno Setup โ€” free and easy ๐Ÿ’ธ

5. Java & C# Generator ๐Ÿ”„

  • DSL code can be converted to Java and C# (though not perfectly)
  • In C#, all function parameters are converted using ref (demonstrates call-by-reference) ๐Ÿ”

๐Ÿ’ก Pascal is a well-known language that supports call-by-reference.

small D Specification ๐Ÿ“š

Sample code can be found in org.xtext.labs.mydsl.product/src

grammar

Supported Types & Constructs

  • num, string, bool
  • Multi-dimensional arrays
  • if ~ else (no else if)
  • while loop only
  • Function definition: def function_name() {}
  • launch_main is the entry point
  • Scope resolution: local โ†’ global fallback
  • No object-oriented features

Limitations โš ๏ธ

  • Not supporting Direct function calls in expressions

    โŒ printstr(numtostr(b))
    โœ…

    a = numtostr(b)
    printstr(a)
  • Grammar supports multiple operations, but interpreter doesn't yet (lazy dev ๐Ÿ˜…) โž• You can define operator precedence manually if needed

Standard Functions (for testing only) ๐Ÿงช

  • printstr(varStr) ๐Ÿ–จ๏ธ
  • strjoin(var1, var2) ๐Ÿ”—
  • varArr = strsplit(var1, "delimiter")
  • varStr = numtostr(varNum)
  • getargs(index)

Setup & Deploy โš™๏ธ

Setup ๐Ÿ› ๏ธ

  1. Import the project into Eclipse
  2. Export org.xtext.labs.mydsl.interpreter as a Runnable JAR
  3. Copy the JAR to your path
  4. Open DSLDeveloper.product
  5. Use Eclipse Product Export Wizard (in Overview tab)
  6. Create a new DSL file from MyDsl project

Deploy Interpreter ๐Ÿš€

  • Export debugDSL.jar from org.xtext.labs.mydsl.interpreter
  • Copy to: D:\DSLDeveloper\debug\debugDSL.jar (example path)

Equinox Configuration ๐Ÿงฉ

Reference: Robert Wlochโ€™s Blog

1. In the Plug-ins tab change the Launch with select box to plug-ins select below only and uncheck the Target Platform subtree and check the two options below the plug-ins list. In the search field above the plug-ins list enter equinox. and check the equinox.ds plug-in: In the filtered list also check the equinox.util plug-in: Now enter appl in the search field and check the ui.ide.application plug-in:
2. Switch to the Configuration tab and check Clear the configuration area before launching. This ensures that runtime Eclipse doesn't cache plug-in configuration which avoids occational pitfalls.
3. The last change needs to be done in the Common tab. Switch the radio choice to Shared file and enter the Project Explorer path to the product plug-in: /de.rowlo.testgenerator.testdsl.product. This will tell Eclipse to save that run configuration in a launcher file in the specified location:
4. Finally switch back to the Plug-ins tab, clear the search filter and check the checkbox Validate plug-ins automatically prior to launching. Then click several times on Add Required Plug-ins right of the plug-ins list. You can stop clicking when the number of selected plug-ins does not change no more. To check if nothing's missing click on Validate Plug-ins. Eclipse should tell you that no problems were detected. Click on Apply and Close the dialog now.

References ๐Ÿ”—

  1. Xtext

  2. Language Engineering

  3. Eclipse Debugger

  4. Deploying as Product

Extra Info ๐Ÿ’ก

โš ๏ธ Known issue: Sometimes, Variables view is empty after suspend.

Workaround: switch view or reload it. Details

๐Ÿ™‡ Many thanks to StackOverflow!

Debug Ports ๐Ÿ“ก

Ports used:

  • 29777, 29888

If port error occurs:

cmd> netstat -ona | findstr 0.0:29777
TCP    0.0.0.0:29777      0.0.0.0:0      LISTENING       3116

cmd> taskkill /F /PID 3116

๐Ÿ›‘ PID 3116 will be terminated

License ๐Ÿ“œ

ยฉ 2017 kimtth

About

๐Ÿ‘€โ–ถ๏ธ [archived] Exploring the Programming Languages Engineering, Domain-Specific Language, Integration with the Eclipse Debug UI, and the Fundamental Features of an Interpreter and Debugger.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published