[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9451] Re: ParseDate.parsedate( "2000-03-16T23:45:54+0900" )

From: Tadayoshi Funaba <tadf@...>
Date: 2000-03-18 04:47:24 UTC
List: ruby-dev #9451
ふなばです。

At 2000-03-18T12:38:13+0900 (2451621.65154JD),
matz@netlab.co.jp (Yukihiro Matsumoto) wrote:

matz> |すでに、この実装は限界に来ているのかもしれません。現在の仕様はともかく 
matz> |(これも議論の余地はあると思いますが)、実装は見直す必要があるのではない
matz> |かと思います。

matz> 同感です。

どうも。

matz> |僕は、parsedate2 というものを書いたんですが、これは、まるで parsedate
matz> |と同じように使えます。こいつは、おおむね parsedate よりうまく働くので
matz> |は、と思っています。このふたつの parsedate を叩き台にして、もっとよい
matz> |実装を得られるかもしれません。

matz> parsedateとインタフェースは同じなんですよね。
matz> じゃあ、1.5では入れ換えちゃいましょうか。
matz> で、しばらくトラブルが起きなかったら1.4.5あたりで取り込むと。

おお。でも、こういう解決方法でよいのか、確信はないです。ですが、これま
で問題点を指摘されてながらも、ここまで来た経緯を考えると、ただ待ってて
も、どうにもなりそうにないので...。

1.5 では、少し直さないとダメですね (さらにちょっとバグってたし :)。

# ためしに、racc で書き直してみたら、それもちゃんと動いたが、-E つきで
# 翻訳するとエラーになってしまう。何故だろう...。


--- parsedate2.ry	1999/09/11 04:51:19	1.4
+++ parsedate2.ry	2000/03/18 02:42:52
@@ -1,3 +1,3 @@
 %{
-# parsedate2.ry: Written by Tadayoshi Funaba 1999
+# parsedate2.ry: Written by Tadayoshi Funaba 1999, 2000
 # $Id: parsedate2.ry,v 1.4 1999/09/11 04:51:19 tadf Exp tadf $
@@ -11,3 +11,3 @@
 
-repr	: day | odaycom dat ;
+repr	: | day | odaycom dat ;
 
@@ -57,3 +57,3 @@
 		{
-		  YYERROR unless /^[MTSH]$/ =~ _$1
+		  raise 'YYERROR' unless /^[MTSH]$/ =~ _$1
 		  store(:year, _$2.to_i +
@@ -133,3 +133,3 @@
 		  else
-		    YYERROR
+		    raise 'YYERROR'
 		  end
@@ -138,3 +138,3 @@
 
-otee	: | LETTERS { YYERROR unless _$1 == 'T' } ;
+otee	: | LETTERS { raise 'YYERROR' unless _$1 == 'T' } ;
 
@@ -148,3 +148,3 @@
 		  else
-		    YYERROR
+		    raise 'YYERROR'
 		  end
@@ -160,3 +160,3 @@
 		{
-		  YYERROR unless _$2 == 'DST'
+		  raise 'YYERROR' unless _$2 == 'DST'
 		  store(:zone, _$1 + ' ' + _$2)
@@ -197,3 +197,3 @@
 
-    if /\A(\d+)(?:(?:th|st|nd|rd)\>)?/ =~ @str
+    if /\A(\d+)(?:(?:th|st|nd|rd)\b)?/ =~ @str
       @str = $'
@@ -207,3 +207,3 @@
 
-    if /\A([ap]\.?m\.?\>)/i =~ @str
+    if /\A([ap]\.?m\.?\b)/i =~ @str
       @str = $'
@@ -254,3 +254,3 @@
     par.clear
-    begin par.yyparse(lex) rescue; end
+    begin par.yyparse(lex); rescue; end
     par.values(cyear)


--- parsedate2.rb-1.4	Tue Sep 14 21:14:50 1999
+++ parsedate2.rb	Sat Mar 18 12:50:31 2000
@@ -1,3 +1 @@
-# parsedate2.ry: Written by Tadayoshi Funaba 1999
-# $Id: parsedate2.ry,v 1.4 1999/09/11 04:51:19 tadf Exp $
 class ParseDatePar
@@ -10,8 +8,8 @@
 
-    DAY = 258
-    DIGITS = 259
-    MON = 260
-    LETTERS = 261
-    MERID = 262
-
+    DAY = 257
+    DIGITS = 258
+    MON = 259
+    LETTERS = 260
+    MERID = 261
+	
     ## User declarations begin
@@ -48,35 +46,35 @@
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
-     6,     7
+     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
+     7
     ]
     YYPRHS = [ 0,
-     0,     2,     5,     7,    11,    13,    19,    25,    31,    33,
-    37,    39,    43,    44,    47,    49,    50,    52,    54,    56,
-    59,    62,    64,    66,    68,    70,    72,    79,    87,    93,
-    97,   103,   107,   114,   115,   118,   121,   122,   124,   127,
-   128,   130,   131,   133,   135,   138,   141,   143
-    ]
-    YYRHS = [ 17,
-     0,    16,    15,     0,    19,     0,    19,    18,    22,     0,
-    28,     0,    28,    18,    19,    18,    22,     0,    19,    18,
-    28,    18,    22,     0,    19,    18,    22,    18,    28,     0,
-    23,     0,    23,    18,    28,     0,    30,     0,    30,    18,
-    32,     0,     0,    17,    18,     0,     3,     0,     0,     8,
-     0,    20,     0,    21,     0,     4,     5,     0,     5,     4,
-     0,     4,     0,    24,     0,    25,     0,    26,     0,    27,
-     0,     4,     9,     4,     9,     4,    31,     0,     6,     4,
-    10,     4,    10,     4,    31,     0,     4,     9,     5,     9,
-     4,     0,     4,    11,     4,     0,     4,    11,     4,    11,
-     4,     0,     4,     7,    34,     0,     4,    12,     4,    29,
-    33,    34,     0,     0,    12,     4,     0,     4,    31,     0,
-     0,     6,     0,     4,    34,     0,     0,     7,     0,     0,
-    35,     0,     6,     0,     6,     6,     0,    36,     4,     0,
-     9,     0,    13,     0
+     0,     1,     3,     6,     8,    12,    14,    20,    26,    32,
+    34,    38,    40,    44,    45,    48,    50,    51,    53,    55,
+    57,    60,    63,    65,    67,    69,    71,    73,    80,    88,
+    94,    98,   104,   108,   115,   116,   119,   122,   123,   125,
+   128,   129,   131,   132,   134,   136,   139,   142,   144
+    ]
+    YYRHS = [ -1,
+    17,     0,    16,    15,     0,    19,     0,    19,    18,    22,
+     0,    28,     0,    28,    18,    19,    18,    22,     0,    19,
+    18,    28,    18,    22,     0,    19,    18,    22,    18,    28,
+     0,    23,     0,    23,    18,    28,     0,    30,     0,    30,
+    18,    32,     0,     0,    17,    18,     0,     3,     0,     0,
+     8,     0,    20,     0,    21,     0,     4,     5,     0,     5,
+     4,     0,     4,     0,    24,     0,    25,     0,    26,     0,
+    27,     0,     4,     9,     4,     9,     4,    31,     0,     6,
+     4,    10,     4,    10,     4,    31,     0,     4,     9,     5,
+     9,     4,     0,     4,    11,     4,     0,     4,    11,     4,
+    11,     4,     0,     4,     7,    34,     0,     4,    12,     4,
+    29,    33,    34,     0,     0,    12,     4,     0,     4,    31,
+     0,     0,     6,     0,     4,    34,     0,     0,     7,     0,
+     0,    35,     0,     6,     0,     6,     6,     0,    36,     4,
+     0,     9,     0,    13,     0
     ]
     YYRLINE = [ 0,
-    14,    14,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    28,    28,    30,    32,    32,    34,    34,    36,
-    38,    40,    42,    42,    42,    42,    44,    58,    72,    86,
-    91,   105,   109,   116,   116,   118,   141,   141,   143,   156,
-   156,   158,   158,   160,   161,   166,   169,   169
+    14,    14,    14,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    28,    28,    30,    32,    32,    34,    34,
+    36,    38,    40,    42,    42,    42,    42,    44,    58,    72,
+    86,    91,   105,   109,   116,   116,   118,   141,   141,   143,
+   156,   156,   158,   158,   160,   161,   166,   169,   169
     ]
@@ -88,24 +86,24 @@
     YYR1 = [ 0,
-    14,    14,    15,    15,    15,    15,    15,    15,    15,    15,
-    15,    15,    16,    16,    17,    18,    18,    19,    19,    20,
-    21,    22,    23,    23,    23,    23,    24,    25,    26,    27,
-    27,    28,    28,    29,    29,    30,    31,    31,    32,    33,
-    33,    34,    34,    35,    35,    35,    36,    36
+    14,    14,    14,    15,    15,    15,    15,    15,    15,    15,
+    15,    15,    15,    16,    16,    17,    18,    18,    19,    19,
+    20,    21,    22,    23,    23,    23,    23,    24,    25,    26,
+    27,    27,    28,    28,    29,    29,    30,    31,    31,    32,
+    33,    33,    34,    34,    35,    35,    35,    36,    36
     ]
     YYR2 = [ 0,
-     1,     2,     1,     3,     1,     5,     5,     5,     1,     3,
-     1,     3,     0,     2,     1,     0,     1,     1,     1,     2,
-     2,     1,     1,     1,     1,     1,     6,     7,     5,     3,
-     5,     3,     6,     0,     2,     2,     0,     1,     2,     0,
-     1,     0,     1,     1,     2,     2,     1,     1
-    ]
-    YYDEFACT = [ 13,
-    15,     0,    16,    37,     0,     0,     2,     3,    18,    19,
-     9,    23,    24,    25,    26,    16,    11,    17,    14,    20,
-    38,    42,     0,     0,     0,    36,    21,     0,     0,     0,
-     0,     0,    44,    47,    48,    32,    43,     0,     0,     0,
-    30,    34,     0,    22,     4,    16,     0,    10,     0,    16,
-    42,    12,    45,    46,     0,     0,     0,     0,    40,     0,
-     0,     0,     0,    39,    37,    29,    31,    35,    41,    42,
-     0,     8,    22,     7,     6,    27,    33,    37,    28,     0,
+     0,     1,     2,     1,     3,     1,     5,     5,     5,     1,
+     3,     1,     3,     0,     2,     1,     0,     1,     1,     1,
+     2,     2,     1,     1,     1,     1,     1,     6,     7,     5,
+     3,     5,     3,     6,     0,     2,     2,     0,     1,     2,
+     0,     1,     0,     1,     1,     2,     2,     1,     1
+    ]
+    YYDEFACT = [ 14,
+    16,     0,    17,    38,     0,     0,     3,     4,    19,    20,
+    10,    24,    25,    26,    27,    17,    12,    18,    15,    21,
+    39,    43,     0,     0,     0,    37,    22,     0,     0,     0,
+     0,     0,    45,    48,    49,    33,    44,     0,     0,     0,
+    31,    35,     0,    23,     5,    17,     0,    11,     0,    17,
+    43,    13,    46,    47,     0,     0,     0,     0,    41,     0,
+     0,     0,     0,    40,    38,    30,    32,    36,    42,    43,
+     0,     9,    23,     8,     7,    28,    34,    38,    29,     0,
      0,     0
@@ -117,15 +115,15 @@
     ]
-    YYPACT = [ 16,
--32768,    30,     6,    15,    37,    39,-32768,     8,-32768,-32768,
+    YYPACT = [ 28,
+-32768,    30,     6,    15,    25,    37,-32768,     8,-32768,-32768,
      8,-32768,-32768,-32768,-32768,     7,     8,-32768,-32768,-32768,
--32768,     4,    24,    40,    41,-32768,-32768,     1,    42,    43,
-    27,    44,    45,-32768,-32768,-32768,-32768,    46,    47,    48,
-    38,    49,    50,    18,     8,    51,    18,-32768,    53,    51,
-     4,-32768,-32768,-32768,    56,    58,    59,    60,    61,    55,
-    43,    62,    62,-32768,    63,-32768,-32768,-32768,-32768,     4,
-    66,-32768,-32768,-32768,-32768,-32768,-32768,    63,-32768,    52,
-    67,-32768
+-32768,     4,    35,    43,    44,-32768,-32768,     1,    45,    46,
+    39,    47,    13,-32768,-32768,-32768,-32768,    48,    23,    49,
+    42,    50,    51,    18,     8,    52,    18,-32768,    54,    52,
+     4,-32768,-32768,-32768,    53,    57,    59,    60,    58,    56,
+    46,    63,    63,-32768,    62,-32768,-32768,-32768,-32768,     4,
+    65,-32768,-32768,-32768,-32768,-32768,-32768,    62,-32768,    70,
+    71,-32768
     ]
     YYPGOTO = [ -32768,
--32768,-32768,-32768,    -8,    22,-32768,-32768,   -23,-32768,-32768,
+-32768,-32768,-32768,    -8,    41,-32768,-32768,   -17,-32768,-32768,
 -32768,-32768,-32768,   -28,-32768,-32768,   -60,-32768,-32768,   -47,
@@ -133,11 +131,12 @@
     ]
-    YYLAST = 70
+    YYLAST = 72
     YYTABLE = [ 29,
-    46,    48,    30,    64,    76,    -1,    -5,    31,    32,    33,
-    43,   -16,    34,    18,    18,    18,    35,    79,     1,    20,
-    21,    22,    77,    23,    22,    24,    25,    39,    40,    25,
-    49,     5,    72,     4,     5,     6,    61,    62,    74,    75,
-    27,    63,    28,    41,    42,    44,    47,    51,    57,    54,
-    53,    81,    50,    60,     0,    55,    56,    20,    18,    65,
-    58,    66,    67,    68,    71,    73,    82,    69,    21,    78
+    46,    48,    30,    64,    76,    -2,    -6,    31,    32,    33,
+    43,   -17,    34,    18,    18,    18,    35,    79,    53,    20,
+    21,    22,    77,    23,    22,    24,    25,    -1,    27,    25,
+     1,    55,    72,     4,     5,     6,    61,    62,    39,    40,
+    28,    63,    49,     5,    74,    75,    41,    42,    44,    47,
+    51,    54,    57,     0,    60,     0,    65,    56,    20,    18,
+    66,    58,    67,    68,    69,    71,    73,    21,    78,    81,
+    82,    50
     ]
@@ -145,8 +144,9 @@
     29,    30,    11,    51,    65,     0,     0,    16,    17,     6,
-    10,     4,     9,     8,     8,     8,    13,    78,     3,     5,
-     6,     7,    70,     9,     7,    11,    12,     4,     5,    12,
-     4,     5,    61,     4,     5,     6,    45,    46,    62,    63,
-     4,    50,     4,     4,     4,     4,     4,     4,    11,     4,
-     6,     0,    31,     4,    -1,     9,     9,     5,     8,     4,
-    12,     4,     4,     4,    10,     4,     0,     7,     6,     4
+    10,     4,     9,     8,     8,     8,    13,    78,     6,     5,
+     6,     7,    70,     9,     7,    11,    12,     0,     4,    12,
+     3,     9,    61,     4,     5,     6,    45,    46,     4,     5,
+     4,    50,     4,     5,    62,    63,     4,     4,     4,     4,
+     4,     4,    11,    -1,     4,    -1,     4,     9,     5,     8,
+     4,    12,     4,     4,     7,    10,     4,     6,     4,     0,
+     0,    31
     ]
@@ -155,3 +155,3 @@
     YYTERROR = 1
-
+    
     def initialize
@@ -159,3 +159,3 @@
     end
-
+    
     def yyparse(lexer)
@@ -170,5 +170,5 @@
 	while true
-
+	    
 	    case jump
-
+	
 	    when :YYNEWSTATE
@@ -180,3 +180,3 @@
 		next
-
+	
 	    when :YYBACKUP
@@ -187,3 +187,3 @@
 		end
-
+	
 		## get a lookahead token if we don't already have one
@@ -199,3 +199,3 @@
 		end
-
+	
 		## if lookahead <= 0, end of input
@@ -208,3 +208,3 @@
 		else
-		    yychar1 = yychar < 0 || yychar > 262 ? 37 : YYTRANSLATE[yychar]
+		    yychar1 = yychar < 0 || yychar > 261 ? 37 : YYTRANSLATE[yychar]
 		    if @yydebug
@@ -214,3 +214,3 @@
 		end
-
+	
 		## see if we know what to do with this token in this state
@@ -221,3 +221,3 @@
 		end
-
+	
 		## yyn is what to do for this token type in this state
@@ -241,3 +241,3 @@
 		end
-
+	    
 		if yyn == YYFINAL
@@ -245,3 +245,3 @@
 		end
-
+	   
 		## shift the lookahead token
@@ -251,3 +251,3 @@
 		end
-
+		
 		## discard the token being shifted unless it is eof
@@ -257,3 +257,3 @@
 		yyvs.push(yylval)
-
+		
 		## count tokens shifted since error; after, three turn off
@@ -265,3 +265,3 @@
 		next
-
+	
 	    when :YYDEFAULT
@@ -275,3 +275,3 @@
 		end
-
+	
 		## do a reduction. yyn is the number of the rule to reduce with
@@ -282,3 +282,3 @@
 		end
-
+		
 		if @yydebug
@@ -293,14 +293,14 @@
 		end
-
+	
 		case yyn
-		when 15
-		     store(:wday, yyvs[-1 + 0].to_i)
-		when 20
-		     store(:mday, yyvs[-1 + -1].to_i); store(:mon, yyvs[-1 + 0])
+		when 16
+		     store(:wday, yyvs[-1 + 0].to_i) 
 		when 21
-		     store(:mon, yyvs[-1 + -1]); store(:mday, yyvs[-1 + 0].to_i)
+		     store(:mday, yyvs[-1 + -1].to_i); store(:mon, yyvs[-1 + 0]) 
 		when 22
-		     store(:year, yyvs[-1 + 0].to_i)
-		when 27
-
+		     store(:mon, yyvs[-1 + -1]); store(:mday, yyvs[-1 + 0].to_i) 
+		when 23
+		     store(:year, yyvs[-1 + 0].to_i) 
+		when 28
+		    
 		    if yyvs[-1 + -1].size >= 4
@@ -314,6 +314,6 @@
 		    end
-
-		when 28
-
-		    YYERROR unless /^[MTSH]$/ =~ yyvs[-1 + -6]
+		    
+		when 29
+		    
+		    raise 'YYERROR' unless /^[MTSH]$/ =~ yyvs[-1 + -6]
 		    store(:year, yyvs[-1 + -5].to_i +
@@ -326,5 +326,5 @@
 		    store(:mday, yyvs[-1 + -1].to_i)
-
-		when 29
-
+		    
+		when 30
+		    
 		    if yyvs[-1 + -4].size >= 4
@@ -338,10 +338,10 @@
 		    end
-
-		when 30
-
+		    
+		when 31
+		    
 		    store(:mon,  yyvs[-1 + -2].to_i)
 		    store(:mday, yyvs[-1 + 0].to_i)
-
-		when 31
-
+		    
+		when 32
+		    
 		    if yyvs[-1 + -4].size >= 4
@@ -355,16 +355,16 @@
 		    end
-
-		when 32
-
-		    store(:hour, yyvs[-1 + -2].to_i + yyvs[-1 + -1])
-
+		    
 		when 33
-
+		    
+		    store(:hour, yyvs[-1 + -2].to_i + yyvs[-1 + -1])
+		    
+		when 34
+		    
 		    store(:hour, yyvs[-1 + -5].to_i + yyvs[-1 + -1])
 		    store(:min,  yyvs[-1 + -3].to_i)
-
-		when 35
-		     store(:sec, yyvs[-1 + 0].to_i)
+		    
 		when 36
-
+		     store(:sec, yyvs[-1 + 0].to_i) 
+		when 37
+		    
 		    case yyvs[-1 + -1].size
@@ -385,9 +385,9 @@
 		    else
-		    YYERROR
+		    raise 'YYERROR'
 		    end
-
-		when 38
-		     YYERROR unless yyvs[-1 + 0] == 'T'
+		    
 		when 39
-
+		     raise 'YYERROR' unless yyvs[-1 + 0] == 'T' 
+		when 40
+		    
 		    case yyvs[-1 + -1].size
@@ -398,19 +398,19 @@
 		    else
-		    YYERROR
+		    raise 'YYERROR'
 		    end
-
-		when 40
-		     yyval = 0
-		when 44
-		     store(:zone, yyvs[-1 + 0])
+		    
+		when 41
+		     yyval = 0 
 		when 45
-
-		    YYERROR unless yyvs[-1 + 0] == 'DST'
-		    store(:zone, yyvs[-1 + -1] + ' ' + yyvs[-1 + 0])
-
+		     store(:zone, yyvs[-1 + 0]) 
 		when 46
-		     store(:zone, yyvs[-1 + -1] + yyvs[-1 + 0])
+		    
+		    raise 'YYERROR' unless yyvs[-1 + 0] == 'DST'
+		    store(:zone, yyvs[-1 + -1] + ' ' + yyvs[-1 + 0])
+		    
+		when 47
+		     store(:zone, yyvs[-1 + -1] + yyvs[-1 + 0]) 
 		when -65536 ## never used, placeholder for ruby
 		end
-
+		
 		if yylen > 0
@@ -419,5 +419,5 @@
 		end
-
+		
 		yyvs.push(yyval)
-
+	
 		if @yydebug
@@ -426,3 +426,3 @@
 		end
-
+		
 		## "Shift" the result of the reduction.
@@ -438,3 +438,3 @@
 		next
-
+	
 	    when :YYERRLAB
@@ -445,3 +445,3 @@
 		next
-
+		
 	    when :YYERRLAB1
@@ -457,3 +457,3 @@
 		end
-
+	    
 		yyerrstatus = 3
@@ -494,3 +494,3 @@
 		end
-
+    
 		yyn = YYTABLE[yyn]
@@ -508,3 +508,3 @@
 		end
-
+    
 		if yyn == YYFINAL
@@ -512,3 +512,3 @@
 		end
-
+    
 		if @yydebug
@@ -516,3 +516,3 @@
 		end
-
+    
 		yyvs.push(yylval)
@@ -521,7 +521,7 @@
 		next
-
+		
 	    end ## case
-
+	    
 	end ## while true
-
+	
     end ## yyparse
@@ -551,3 +551,3 @@
     end
-    if /\A(\d+)(?:(?:th|st|nd|rd)\>)?/ =~ @str
+    if /\A(\d+)(?:(?:th|st|nd|rd)\b)?/ =~ @str
       @str = $'
@@ -559,3 +559,3 @@
     end
-    if /\A([ap]\.?m\.?\>)/i =~ @str
+    if /\A([ap]\.?m\.?\b)/i =~ @str
       @str = $'
@@ -597,3 +597,3 @@
     par.clear
-    begin par.yyparse(lex) rescue; end
+    begin par.yyparse(lex); rescue; end
     par.values(cyear)


ふなば ただよし

In This Thread