Sha256: cebc3df0bbdd3945b76772268e40d2a68303a1c91fcc81a5b4df5a94243213d2

Contents?: true

Size: 1.98 KB

Versions: 3

Compression:

Stored size: 1.98 KB

Contents

grammar XdrDeclarationGrammar
  rule declaration
    void_decl /
    opaque_decl /
    string_decl /
    array_decl /
    optional_decl /
    simple_decl
  end

  rule void_decl
    "void" 
    <Xdrgen::AST::Declarations::Void>
  end
  
  rule opaque_decl
    type_s:("opaque" <Xdrgen::AST::Typespecs::Opaque>)
    space 
    identifier 
    size_spec:(fixed_size_spec / var_size_spec)
    <Xdrgen::AST::Declarations::Opaque>
  end

  rule string_decl
    type_s:("string" <Xdrgen::AST::Typespecs::String>)
    space 
    identifier 
    size_spec:var_size_spec 
    <Xdrgen::AST::Declarations::String>
  end

  rule array_decl
    type_s:type_specifier
    space
    identifier
    size_spec:(fixed_size_spec / var_size_spec)
    <Xdrgen::AST::Declarations::Array>
  end

  rule optional_decl
    type_s:type_specifier 
    ("*" space? / space? "*")
    identifier 
    <Xdrgen::AST::Declarations::Optional>
  end

  rule simple_decl
    type_s:type_specifier 
    space 
    identifier
    <Xdrgen::AST::Declarations::Simple>
  end

  rule type_specifier
    (integral_type_spec /
    float_type_spec /
    boolean_type_spec /
    enum_type_spec /
    struct_type_spec /
    union_type_spec /
    (identifier <Xdrgen::AST::Typespecs::Simple>))
  end

  rule integral_type_spec
    (("int" <Xdrgen::AST::Typespecs::Int>) /
    ("hyper" <Xdrgen::AST::Typespecs::Hyper>) /
    ("unsigned int" <Xdrgen::AST::Typespecs::UnsignedInt>)/
    ("unsigned hyper" <Xdrgen::AST::Typespecs::UnsignedHyper>))
    type_suffix
  end

  rule float_type_spec
    (("float" <Xdrgen::AST::Typespecs::Float>) / 
    ("double" <Xdrgen::AST::Typespecs::Double>) / 
    ("quadruple" <Xdrgen::AST::Typespecs::Quadruple>) )
    type_suffix
  end

  rule boolean_type_spec
    "bool"
    type_suffix
    <Xdrgen::AST::Typespecs::Bool>
  end

  rule type_suffix
    &(space / "*")
  end


  rule fixed_size_spec
    "[" size_t:size "]"
    <Xdrgen::AST::FixedSize>
  end

  rule var_size_spec
    "<" size_t:size? ">"
    <Xdrgen::AST::VarSize>
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
xdrgen-0.1.1 lib/xdrgen/grammar/declaration.treetop
xdrgen-0.1.0 lib/xdrgen/grammar/declaration.treetop
xdrgen-0.0.1 lib/xdrgen/grammar/declaration.treetop