Sha256: b6ab406186698ba071a358db8dc724771fd908f3da199e2efa7d2f8a003807f4
Contents?: true
Size: 1.77 KB
Versions: 2
Compression:
Stored size: 1.77 KB
Contents
module TlaParserS module LValue # default implmentation for 'recurse_lvalue' when no block: create expression # def default_lvalue( memo, node ) case node.node_type when "LValue" # when 'Identifier', "LValue" memo = node.lvalue # when 'RecordField' # memo = memo ? "#{memo}.#{node.lvalue}" : node.lvalue # when 'RecordFieldName' # memo = memo ? "#{memo}[#{node.lvalue}]" : node.lvalue when 'UnitExpression' # no output - just recurs when 'FieldByName' memo = "#{memo}.#{node.lvalue}" when 'FieldByValue' memo = "#{memo}[#{node.lvalue}]" else raise "Lvalue recursion, parser error unkown node_type #{node_type} #{node.inspect}" end memo end # recurs # @return [String] lvalue def lvalue # n = recursive_select( SbuilderSexp::Root ).first # return nil unless n recursive_select( SbuilderSexp::Identifier ).first.node_value end # Recurse down 'RecordField' structure and create string for # lvalue or yield block with 'ret' and 'node'. # # @param ret [Object|String] to create in recursion # @return [String] like A, A.b, A[c], A[d].e def recurse_lvalue( ret=nil, &blk ) if ( blk ) ret = yield( ret, self ) else ret = default_lvalue( ret, self ) end ret = lvalue_down.recurse_lvalue( ret, &blk ) if lvalue_down ret end # Eac lvalue should implement something like this: # # @return [nil|RecordField] down next level in hierarchy # def lvalue_down # down = recursive_select( Sexp::RecordField ).first # return nil unless down # down.recursive_select( Sexp::RecordField ).first # end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tla-parser-s-0.2.5 | lib/parser/lvalue.rb |
tla-parser-s-0.2.2 | lib/parser/lvalue.rb |