# Syntax error inconsistency between ruby -c and ripper

**URL:** <https://www.ruby-forum.com/t/syntax-error-inconsistency-between-ruby-c-and-ripper/232741>\
**Category:** Development\
**Created:** [October 25, 2014, 2:34am UTC](https://www.ruby-forum.com/t/syntax-error-inconsistency-between-ruby-c-and-ripper/232741 "2014-10-25T02:34:32Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![addis\_a](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@addis\_a](https://www.ruby-forum.com/u/addis_a)\
**Post date:** [October 25, 2014, 2:34am UTC](https://www.ruby-forum.com/t/syntax-error-inconsistency-between-ruby-c-and-ripper/232741/1 "2014-10-25T02:34:32Z")

</div>

Issue #10405 has been updated by Akira T…

なるほど。

でも、やはり nil がいいかなぁ、と思います。

ありうる挙動は、nil を返すか、例外を起こすかだと思うのですが、  
いままで例外を起こしていなかったものについて例外を起こすようにするのは非互換ですし。

また、parse という処理にとって、syntax error は当然想定されるもので例外的ではない気がします。

なお、gem をちょっと探してみると、以下のように、syntax error のときに nil を返してくると想定している  
と思われるコードはいくつかありました。  
(例外を想定しているコードは見つかりません。)

```auto
phaad-0.0.3/lib/phaad/cli.rb- def valid_expression?(lines)
phaad-0.0.3/lib/phaad/cli.rb: !!Ripper.sexp(lines)
phaad-0.0.3/lib/phaad/cli.rb- end

printrun-0.0.1/lib/printrun/core.rb: Ripper.sexp_raw(buffer) ? 
(out << buffer) && "" : buffer

tailor-1.4.0/lib/tailor/lexer/token.rb: sexp_line = 
Ripper.sexp(line_of_text)
tailor-1.4.0/lib/tailor/lexer/token.rb-
tailor-1.4.0/lib/tailor/lexer/token.rb- if sexp_line.nil?

```

* * *

Bug #10405: syntax error inconsistency between ruby -c and ripper

> **[Bug #10405: syntax error inconsistency between ruby -c and ripper - Ruby...](https://bugs.ruby-lang.org/issues/10405#change-49635)**
>
> Redmine

- Author: Akira T.
- Status: Feedback
- Priority: Normal
- Assignee:
- Category: ext
- Target version: current: 2.2.0
- ruby -v: ruby 2.2.0dev (2014-10-20 trunk 48052) [x86\_64-linux]
- Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN

* * *

以下のように、a / b c という内容のファイルを  
ruby -c で検査すると syntax error になるのですが  
Ripper.sexp に適用するとなにか構文木が返ってきます。

```auto
% cat z.rb
a / b c
% ./ruby -c z.rb
z.rb:1: syntax error, unexpected tIDENTIFIER, expecting keyword_do or 
'{' or '('
zsh: exit 1 ./ruby -c z.rb
% ./ruby -rripper -e 'p Ripper.sexp(STDIN.read)' < z.rb
[:program, [:vcall, [:@ident, "c", [1, 6]]]]
% ./ruby -v
ruby 2.2.0dev (2014-10-20 trunk 48052) [x86_64-linux]

```

これは変な気がするんですがどうでしょうか。
