Open main menu

UESPWiki β

Oblivion Mod:Oblivion Token Tables

The input character steam will be tokenized using a table based rules as defined in text files.

Type DefinitionsEdit

The basic type definitions for all the classes needed for a table based tokenizer are given below:

  tokentableresult {
     int        Action  { ignore moveto return error continue jmpreturn jumpto }     //Type of action to take
     string     TableName            
     table*     Table                 //Destination for a table move/jump type
     string     TokenName            
     tokentype* TokenType             //Token to return for a return type
     string     Message               //User message for an error type
  }
 
  tokentablerow {
     int               MatchType { none charclass char string }    //Type of match to perform
     string            CharClassName  
     charclass*        CharClass      //Class to match for a class type row
     char              Char           //Character to match for a character type row
     string            StringValue    //String to match for a string type row
     tokentableresult  Result         //Action to take when the row matches
  }
 
  tokentable {
     string         Name              //Identifies the table
     tokentablerow  Rows[]            //Array of all rows in the table
     tokentablerow* DefaultRow        //Default row to be used when no matches are found
  }
 
  tokentablearray {
     tokentable   Tables[]            //Array of all tables
     tokentable*  StartTable          //The table to start tokenizing with
  }


Data File FormatEdit

The token tables are defined in a text file with the following format:

  [TableName]
     [RowMatch] = [Action]
     ...
  End
  ...

[RowMatch] can have the following values:

  • CharacterClass -- A character class name as defined in the current class file.
  • "[string]" -- A string surrounded by double quotes.
  • [Character] -- A single character.
  • Default -- The default row which is used when no match in the table is found.

The [Action] for a row can have the following values:

  • ignore -- Ignore the current character and restart parsing the current token table.
  • moveto [TableName] -- Add the current character to the token and start parsing the given token table.
  • jumpto [TableName] -- Start parsing the given token table (does not add the current character to the token).
  • return [TokenType] -- Add the current character to the token and return the given token type. Clear the current token value.
  • jmpreturn [TokenType] -- Return the given token type (does not add the current character to the token). Clear the current token value.
  • continue -- Add the current character to the token and restart parsing the current table.
  • error [Message] -- Add the current character to the token and report an error using the supplied string. Clear the current token value.

Oblivion Token TablesEdit

The following token tables (along with the matching Character Classes and Token Types) are capable of successfully tokenizing all of the 1687 scripts found in Oblivion.

  Begin
     Comment    = moveto Comment_Table
     Digit      = moveto Digit_Table
     Quote      = moveto String_Table
     IDStart    = moveto ID_Table
     (          = return LBracket
     )          = return RBracket
     AddOp      = return AddOp
     MultOp     = return MultOp
     &          = moveto And_Table
     |          = moveto Or_Table
     Equal      = moveto EQ_Table
     >          = moveto GT_Table
     <          = moveto LT_Table
     !          = moveto NEQ_Table
     EndLine    = return endline
     WhiteSpace = ignore
     Default    = return EndofProgram
  End
 
  And_Table
     &       = return BoolOp
     Default = jmpreturn Unknown
  End
 
  Or_Table
     |       = return BoolOp
     Default = jmpreturn Unknown
  End

  Digit_Table
     Digit   = continue
     Decimal = moveto Decimal_Table
     Default = jmpreturn Integer
  End
   
  Decimal_Table
     Digit   = continue
     Default = jmpreturn Float
  End
   
  String_Table
     Quote     = return String
     EndString = moveto String_Table
     Default   = error Unterminated string found! Ensure all strings end with a quote character.
  End
  
  ID_Table
     ID      = continue
     Default = jumpto CheckKeyWord_Table
  End

  CheckKeyWord_Table
     "if"         = jmpreturn if
     "endif"      = jmpreturn endif
     "set"        = jmpreturn set
     "elseif"     = jmpreturn elseif
     "else"        = jmpreturn else
     "endif"      = jmpreturn endif
     "begin"      = jmpreturn begin
     "end"        = jmpreturn end
     "scriptname" = jmpreturn scriptname
     "scn"        = jmpreturn scriptname
     Default      = jmpreturn Identifier
  End
  
  Comment_Table
     EndLine = jmpreturn Comment
     Default = continue
  End

  EQ_Table
     Equal   = return RelOp
     Default = error Unexpected = found! Valid comparison operators are: <, >, <=, >=, ==, and !=
  End
  
  GT_Table
     Equal   = return RelOp 
     Default = jmpreturn RelOp
  End

  LT_Table      Equal   = return RelOp
     Default = jmpreturn RelOp
  End

  NEQ_Table
     Equal   = return RelOp
     Default = error Unexpected ! found! Valid comparison operators are: <, >, <=, >=, ==, and !=
  End