Goldie: FAQ

Goldie
Parsing System (v0.9)
Goldie Home (v0.9)
Getting Started

- Requirements
- Download / Install
- Never Used a Parsing Tool?
- Goldie Overview
- Beginner's Tutorial
- Grammar Definition Language
- Contact / Support
  - Message Board
  - Issue Tracking

Goldie's Tools

- AlterCGT
- DumpCGT
- GenDocs
  - Template Format
- GRMC: Grammar Compiler
- JsonViewer
  - Parse Tree Mode
- Parse
- StaticLang
- Other Tools

GoldieLib Overview

- Static And Dynamic Styles
- Ambiguous Symbols

GoldieLib Reference

- Base
- Exception
- class Language
- class Lexer
- class Parser
- struct Symbol
- class Token
- Ver

GoldieLib Sample Apps

- Calculator Static
- Calculator Dynamic
- Sample Generic Parse

CGT File Format
FAQ
Change Log
If You Use Git Master
Future Work
Developers

- Scripts for Developers
- Library Source and StaticLang

Goldie Home (v0.9) -> FAQ

# FAQ

- Q: How can I use Goldie to create a compiler?
- Q: Why the name "Goldie"?
- Q: How do I refer to a rule that has no subtokens?
- Q: Can Goldie parse the D language?
- Q: I'm getting "Ambiguous symbol" errors!
- Q: This project sounds very similar to Gazelle. What's the difference, and which one is better?
- Q: What about Goldie vs. ANTLR?
- Q: Are these questions really frequently-asked?

## Q: How can I use Goldie to create a compiler?

A: This is not an easy task no matter what parsing tool you use. To get started, see the Never Used a Parsing Tool? page which contains an overview of everything involved in creating a full compiler.

In summary: Use Goldie to implement a lexer/parser (see Goldie Overview and the Beginner's Tutorial), and then, just as with any other parsing tool, you'll have to do your own semantic analysis on the resulting tree, and then implement a compiler backend.

## Q: Why the name "Goldie"?

A: "GOLD for D" -> "GOLD D" -> "Goldie"

## Q: How do I refer to a rule that has no subtokens?

A: Use null for the list of subtokens. For details and examples, see Referring to a rule that has no subtokens on the GoldieLib Overview page.

## Q: Can Goldie parse the D language?

Short answer: Lexing: Mostly, yes (see the included dlex.grm). Parsing: Not yet.

Long answer: See this newsgroup discussion thread.

## Q: I'm getting "Ambiguous symbol" errors!

A: See Ambiguous Symbols.

## Q: This project sounds very similar to Gazelle. What's the difference, and which one is better?

A: GOLD/Goldie and Gazelle are both members of a new class of generic parsers that focus on fully-reusable grammars that aren't tied to any particular host language. They both accomplish this by completely separating the grammar from the parsing engine.

Both systems have their pros and cons, and which one's better is up to you. They're both evolving, so limitations on both sides are likely to change. Here is a comparison (disclaimer: based on my admittedly limited knowledge of Gazelle) so you can decide for yourself:

| Goldie | Gazelle
--- | --- | ---
Parser Type | LALR(1) | LL(*)
Grammars Compile To | Tables | Bytecode
Written In | D | C
Easily Used From Other Languages | Yes | Yes
Event-Based Parsing | No | Yes
Creates a Parse Tree | Yes | No
Speed | Medium focus so far | Strong focus so far
Usability (Tools, API, Docs, etc...) | Strong focus so far | Medium focus so far
Existing Ecosystem | Fairly large, due to compatability with GOLD | Currently limited to the main Gazelle project
Grammar Definition Expressiveness | Powerful, but room for improvement | Appears to be quite powerful
Regular Expressions for Defining Terminals | GOLD's custom regex syntax, designed to be easy to read | Standard PCRE regex
Various Tools Available | Yes | Yes
Integrated Lexing and Parsing | Yes | Yes
Library API for Compiling Grammars | Yes | Yes
Strives for Flexibility | Yes | Yes
Cross-Platform | Yes | Yes
Commandline Compatible | Yes | Yes
Open Source | Yes, zlib/libpng | Yes, 3-Clause BSD

(If anything in this comparison appears to be wrong or out-of-date, I invite you to file a bug report.)

## Q: What about Goldie vs. ANTLR?

A: While Goldie and Gazelle are in roughly the same class, ANTLR is very different in that grammars are not independent from the host language.

| Goldie | Gazelle | ANTLR
--- | --- | --- | ---
Parser Type | LALR(1) | LL(*) | LL(k)
Maturity | Still young | Still young | Very mature, with a large following
Official Host Languages | D | C | Java, C, C#, Python, ActionScript
Other Host Languages Available | Yes | No | Yes
Easy to Support a New Host Language | Yes | Yes | No. Typically, the entire ANTLR and StringTemplate projects must be ported.
Can Embed Source Code Into Grammar | No | No | Yes
Reuse Grammars on Other Host Languages | Yes | Yes | Typically, no. The embedded code must be ported.
Extensive Tools, Including GUIs | Yes | No | Yes
Open Source | Yes, zlib/libpng | Yes, 3-Clause BSD | Yes, 3-Clause BSD
Nutty Creator | Yes | Unknown | Yes

(If anything in this comparison appears to be wrong or out-of-date, I invite you to file a bug report.)

## Q: Are these questions really frequently-asked?

A: No, I'm just anticipating most of them. ;)