Re[2]: не компилирует variant
От: JеS Россия  
Дата: 20.01.11 17:49
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Типы нельзя объявлять внутри функций и методов.


Изначально код выглядел так:


using System.Console;

def readInput()
{
  def result = ReadLine();
  
  unless (result == "")
  {
    WriteLine("Вы ввели:");
    WriteLine(result);
    readInput();
  }
}

readInput();

variant Token
{
  | Number
  | Operator
  | Error
}

def lexer(text : string) : list[Token]
{
  mutable index = 0;

  def peek() : char
  {
    if (index >= text.lenght ) '\0' 
      else text[index]
  }

  def read() : char
  {
    def ch = peek();
    
    when(index < text.lenght)
      index++
    ch;
   }
   
   def isDegit(ch) { ch >= '0' && ch <= '9' }
   
   def loop(resultTokens : list[Token]) : list[Token]
   {
     def errror()
     {
       WriteLine(string(' ',index - 1) + "^");
       WriteLine("Errror.You may entered digit or operator!");
       (Token.Error() :: resultTokens).Reverse()
     }
     
     def number(ch : char, accamulator : int = 0) : int
     {
       def hightOrderValue   = accamulator * 10;
       def currentOrderValue = ch - '0' : int;
       def currentValue      = currentOrderValue + hightOrderValue;
       
       if(isDigit(peek()))
         number(read(), currentValue);
       else
         currentValue
     }
       
     def ch = read();
     
     match(ch)
     {
       | ' ' | '\t'            => loop(resultTokens)
       | '+' | '-' | '*' | '/' => loop(Token.Operator(ch.ToString()) :: resultTokens)
       | '\0'                  => resultTokens.Reverse()
       | _ when isDigit(ch)    => loop(Token.Number(number(ch)) :: resultTokens)
       | _                     => error()
     }
   }
   loop([]);
 }


Он взят из RSDN Magazine (2009 год 3 выпуск статья "Язык Nemerle.Часть 2")

ошибки те же самые.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.