From e8ee5fa11878a7be31e5327b4d7abbecdfbad35f Mon Sep 17 00:00:00 2001 From: William Joye Date: Thu, 17 May 2018 14:28:03 -0400 Subject: add ds9 urlfits parser --- ds9/library/source.tcl | 2 ++ ds9/library/url.tcl | 10 +++++++++- ds9/parsers/urlfitslex.fcl | 16 ++++++++++++++++ ds9/parsers/urlfitsparser.tac | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 ds9/parsers/urlfitslex.fcl create mode 100644 ds9/parsers/urlfitsparser.tac diff --git a/ds9/library/source.tcl b/ds9/library/source.tcl index 2e72c37..9b358c5 100644 --- a/ds9/library/source.tcl +++ b/ds9/library/source.tcl @@ -352,6 +352,8 @@ source $ds9(root)/library/twomassparser.tcl source $ds9(root)/library/twomasslex.tcl source $ds9(root)/library/updateparser.tcl source $ds9(root)/library/updatelex.tcl +source $ds9(root)/library/urlfitsparser.tcl +source $ds9(root)/library/urlfitslex.tcl source $ds9(root)/library/viewparser.tcl source $ds9(root)/library/viewlex.tcl source $ds9(root)/library/vlaparser.tcl diff --git a/ds9/library/url.tcl b/ds9/library/url.tcl index 2643e32..8a65ab7 100644 --- a/ds9/library/url.tcl +++ b/ds9/library/url.tcl @@ -313,9 +313,16 @@ proc ProcessURLFitsCmd {varname iname} { upvar $varname var upvar $iname i + global debug + if {$debug(tcl,parser)} { + urlfits::YY_FLUSH_BUFFER + urlfits::yy_scan_string [lrange $var $i end] + urlfits::yyparse + incr i [expr $urlfits::yycnt-1] + } else { + set layer {} set mode {} - switch -- [string tolower [lindex $var $i]] { new { incr i @@ -333,4 +340,5 @@ proc ProcessURLFitsCmd {varname iname} { LoadURLFits [lindex $var $i] $layer $mode } +} diff --git a/ds9/parsers/urlfitslex.fcl b/ds9/parsers/urlfitslex.fcl new file mode 100644 index 0000000..108d416 --- /dev/null +++ b/ds9/parsers/urlfitslex.fcl @@ -0,0 +1,16 @@ +#tab urlfitsparser.tab.tcl + +%{ +%} + +#include defs.fin + +%% + +mask {return $MASK_} +new {return $NEW_} +slice {return $SLICE_} + +#include string.fin + +%% diff --git a/ds9/parsers/urlfitsparser.tac b/ds9/parsers/urlfitsparser.tac new file mode 100644 index 0000000..bd1ac6c --- /dev/null +++ b/ds9/parsers/urlfitsparser.tac @@ -0,0 +1,36 @@ +%{ +%} + +#include string.tin + +%start command + +%token MASK_ +%token NEW_ +%token SLICE_ + +%% + +# XPA/SAMP only +command : urlfits + ; + +urlfits: new STRING_ {LoadURLFits $2 {} {}} + | new MASK_ STRING_ {LoadURLFits $3 mask {}} + | new SLICE_ STRING_ {LoadURLFits $3 {} slice} + | new MASK_ SLICE_ STRING_ {LoadURLFits $4 mask slice} +; + +new : + | NEW_ {CreateFrame} + ; + +%% + +proc urlfits::yyerror {msg} { + variable yycnt + variable yy_current_buffer + variable index_ + + ParserError $msg $yycnt $yy_current_buffer $index_ +} -- cgit v0.12