This is a Thrift IDL parser written in Ruby.
Rift parses Thrift IDL into a simple abstract syntax tree. It uses Rexical for lexing, and Racc for parsing. The Thrift IDL grammar is largely supported; constructs tagged as deprecated within the Thrift project are not permitted. Also, text from doc comments are not currently represented in the tree.
Largely an excuse to play with Rexical and Racc, but you may find some practical uses for it.
An executable, ./bin/rift
is available, simply for testing purposes. It simply outputs a YAML representation of
the syntax tree. For example, the following IDL:
struct Location {
1: required double latitude;
2: required double longitude;
}
Will result in a syntax tree similar to the following:
---
- !ruby/object:Rift::Nodes::Struct
name: Location
type: struct
annotations:
members:
- !ruby/object:Rift::Nodes::Field
identifier: !ruby/object:Rift::Nodes::FieldIdentifier
auto_assigned: false
value: 1
name: latitude
requiredness: required
type: !ruby/object:Rift::Nodes::FieldType
type: primitive
value: !ruby/object:Rift::Nodes::BaseType
annotations:
type: double
value:
xsd_attributes:
xsd_nillable: false
xsd_optional: false
- !ruby/object:Rift::Nodes::Field
identifier: !ruby/object:Rift::Nodes::FieldIdentifier
auto_assigned: false
value: 2
name: longitude
requiredness: required
type: !ruby/object:Rift::Nodes::FieldType
type: primitive
value: !ruby/object:Rift::Nodes::BaseType
annotations:
type: double
value:
xsd_attributes:
xsd_nillable: false
xsd_optional: false