in doc-src/parsejs/lib/parsejs/grammar.kpeg.rb [8011:8173]
def _DecimalLiteral
_save = self.pos
while true # choice
_save1 = self.pos
while true # sequence
_text_start = self.pos
_save2 = self.pos
while true # sequence
_tmp = apply(:_DecimalIntegerLiteral)
unless _tmp
self.pos = _save2
break
end
_tmp = match_string(".")
unless _tmp
self.pos = _save2
break
end
while true
_tmp = apply(:_DecimalDigit)
break unless _tmp
end
_tmp = true
unless _tmp
self.pos = _save2
break
end
_save4 = self.pos
_tmp = apply(:_ExponentPart)
unless _tmp
_tmp = true
self.pos = _save4
end
unless _tmp
self.pos = _save2
end
break
end # end sequence
if _tmp
text = get_text(_text_start)
end
unless _tmp
self.pos = _save1
break
end
@result = begin; number(text); end
_tmp = true
unless _tmp
self.pos = _save1
end
break
end # end sequence
break if _tmp
self.pos = _save
_save5 = self.pos
while true # sequence
_text_start = self.pos
_save6 = self.pos
while true # sequence
_tmp = match_string(".")
unless _tmp
self.pos = _save6
break
end
_save7 = self.pos
_tmp = apply(:_DecimalDigit)
if _tmp
while true
_tmp = apply(:_DecimalDigit)
break unless _tmp
end
_tmp = true
else
self.pos = _save7
end
unless _tmp
self.pos = _save6
break
end
_save8 = self.pos
_tmp = apply(:_ExponentPart)
unless _tmp
_tmp = true
self.pos = _save8
end
unless _tmp
self.pos = _save6
end
break
end # end sequence
if _tmp
text = get_text(_text_start)
end
unless _tmp
self.pos = _save5
break
end
@result = begin; number(text); end
_tmp = true
unless _tmp
self.pos = _save5
end
break
end # end sequence
break if _tmp
self.pos = _save
_save9 = self.pos
while true # sequence
_text_start = self.pos
_save10 = self.pos
while true # sequence
_tmp = apply(:_DecimalIntegerLiteral)
unless _tmp
self.pos = _save10
break
end
_save11 = self.pos
_tmp = apply(:_ExponentPart)
unless _tmp
_tmp = true
self.pos = _save11
end
unless _tmp
self.pos = _save10
end
break
end # end sequence
if _tmp
text = get_text(_text_start)
end
unless _tmp
self.pos = _save9
break
end
@result = begin; number(text); end
_tmp = true
unless _tmp
self.pos = _save9
end
break
end # end sequence
break if _tmp
self.pos = _save
break
end # end choice
set_failed_rule :_DecimalLiteral unless _tmp
return _tmp
end