2016-05-18 138 views
-2

運行我的代碼時,我不斷收到此錯誤(語法錯誤,意外的keyword_end,期待輸入結束)。我看過,似乎所有的目標都匹配。我似乎錯過了一些東西。任何幫助,將不勝感激。ruby​​語法錯誤,意外的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行有一個錯字:next $ token – guitarman

回答

0

行132中的do不應該在那裏。代碼中還有許多其他語法錯誤。

+1

這解決了錯誤。我會去解決其他問題。 –

相關問題