2016-05-18 12 views
-2

コードを実行してもこのエラーが発生します(構文エラー、予期しないkeyword_end、予期しない入力が予想されます)。私は見て、それはすべての端が一致するように思える。私は何かが欠けているようだ。どんな助けもありがとう。ruby​​ syntax error、予期しないkeyword_end、入力の終了を期待しています(SyntaxError)

$charClass = $charClass.to_i 
$lexeme= Array.new(100) 
$nextChar = $nextChar.to_s 
$lexLen = $lexLen.to_i 
$token = $token.to_i 
$nextToken = $nextToken.to_i 
$input = File.read('user input.txt') 

class String 
    def valid_integer? 
     true if Integer(self) rescue false 
    end 
end 

LETTER = 0 
DIGIT = 1 
UNKNOWN = 99 

INT_LIT = 10 
IDENT = 11 
ASSIGN_OP = 20 
ADD_OP = 21 
SUB_OP = 22 
MULT_OP = 23 
DIV_OP = 24 
LEFT_PAREN = 25 
RIGHT_PAREN = 26 


def lookup (ch) 
    case ch 
     when '(' 
     addChar 
     $nextToken = LEFT_PAREN 

     when ')' 
     addChar 
     $nextToken = RIGHT_PAREN 

     when '+' 
     addChar 
     $nextToken = ADD_OP 

     when '-' 
     addChar 
     $nextToken = SUB_OP 

     when '*' 
     addChar 
     $nextToken = MULT_OP 

     when '/' 
     addChar 
     $nextToken = DIV_OP 

     else 
     addChar 
     $nextToken = EOF; 
     end 
    return $nextToken 
end 

def addChar 
    if $lexLen <= 98 
     $lexeme[$lexLen+1] = $nextChar; 
     $lexeme[$lexLen] = 0 
    else 
     puts "Error - $lexeme is too long" 
    end 
end 

def getChar() 
    if (($nextChar = $input.split("")) != EOF) 
     if $nextChar.match(/^[[:alpha:]]$/) 
      $charClass = LETTER 
     elsif $nextChar.valid_integer? 
      $charClass = DIGIT 
     else $charClass = UNKNOWN 
     end 
    $charClass = EOF 
    end 
end 

def getNonBlank() 
    while $nextChar =~ /^\s*$/ 
    getchar() 
    end 
end 

def lex 
    $lexLen = 0 
    getNonBlank 
    case $charClass 

     when LETTER 
     addChar 
     getChar 
     while $charClass == LETTER || $charClass == DIGIT 
      addChar 
      getChar 
      end 
     $nextToken = IDENT 

     when DIGIT 
     addChar 
     getChar 
     while $charClass == DIGIT 
      addChar 
      getChar 
      end 
     next$token = INT_LIT 

     when UNKNOWN 
     lookup($nextChar) 
     getChar 

     when EOF 
     $nextToken = EOF 
     $lexeme[0] = 'E' 
     $lexeme[1] = 'O' 
     $lexeme[2] = 'F' 
     $lexeme[3] = 0 
     end 
    puts "Next $token is #{$nextToken}, Next $lexeme is #{$lexeme}" 
    return $nextToken 
end 

if $input.nil? 
    puts "ERROR = cannot open input" 
    else 
    getChar() 
    do lex() 
     while ($nextToken != EOF) 
     end 
    end 
end 
+0

どのラインでエラーが発生しますか? – spickermann

+0

行111に誤字があります。次の$ token – guitarman

答えて

0

ライン132のdoは存在しません。コードには他にも多くの構文エラーがあります。

+1

これで、このエラーが修正されました。私は通り抜けて、他のものを修正します。 –

関連する問題