/* File: Options */ //Ascii values of characters #define ASCII_A 65 #define ASCII_Z 90 #define ASCII_LOWER_A 97 #define ASCII_LOWER_Z 122 #define ASCII_DOLLAR 36 // $ #define ASCII_ZERO 48 #define ASCII_NINE 57 #define ASCII_UNDERSCORE 95 // _ /* Class: n_scriptOptions */ /n_scriptOptions/proc/CanStartID(char) //returns true if the character can start a variable, function, or keyword name (by default letters or an underscore) if(!isnum(char))char=text2ascii(char) return (char in ASCII_A to ASCII_Z) || (char in ASCII_LOWER_A to ASCII_LOWER_Z) || char==ASCII_UNDERSCORE || char==ASCII_DOLLAR /n_scriptOptions/proc/IsValidIDChar(char) //returns true if the character can be in the body of a variable, function, or keyword name (by default letters, numbers, and underscore) if(!isnum(char))char=text2ascii(char) return CanStartID(char) || IsDigit(char) /n_scriptOptions/proc/IsDigit(char) if(!isnum(char))char=text2ascii(char) return char in ASCII_ZERO to ASCII_NINE /n_scriptOptions/proc/IsValidID(id) //returns true if all the characters in the string are okay to be in an identifier name if(!CanStartID(id)) //don't need to grab first char in id, since text2ascii does it automatically return 0 if(length(id)==1) return 1 for(var/i=2 to length(id)) if(!IsValidIDChar(copytext(id, i, i+1))) return 0 return 1 /* Class: nS_Options An implementation of for the n_Script language. */ /n_scriptOptions/nS_Options var/list/symbols = list("(", ")", "\[", "]", ";", ",", "{", "}") //scanner - Characters that can be in symbols /* Var: keywords An associative list used by the parser to parse keywords. Indices are strings which will trigger the keyword when parsed and the associated values are types of which the proc will be called. */ var/list/keywords = list( "if" = /n_Keyword/nS_Keyword/kwIf, "else" = /n_Keyword/nS_Keyword/kwElse, "while" = /n_Keyword/nS_Keyword/kwWhile, "break" = /n_Keyword/nS_Keyword/kwBreak, "continue" = /n_Keyword/nS_Keyword/kwContinue, "return" = /n_Keyword/nS_Keyword/kwReturn, "def" = /n_Keyword/nS_Keyword/kwDef ) var/list/assign_operators = list( "=" = null, "&=" = "&", "|=" = "|", "`=" = "`", "+=" = "+", "-=" = "-", "*=" = "*", "/=" = "/", "^=" = "^", "%=" = "%" ) var/list/unary_operators =list( "!" = /node/expression/op/unary/LogicalNot, "~" = /node/expression/op/unary/BitwiseNot, "-" = /node/expression/op/unary/Minus ) var/list/binary_operators=list( "==" = /node/expression/op/binary/Equal, "!=" = /node/expression/op/binary/NotEqual, ">" = /node/expression/op/binary/Greater, "<" = /node/expression/op/binary/Less, ">=" = /node/expression/op/binary/GreaterOrEqual, "<=" = /node/expression/op/binary/LessOrEqual, "&&" = /node/expression/op/binary/LogicalAnd, "||" = /node/expression/op/binary/LogicalOr, "&" = /node/expression/op/binary/BitwiseAnd, "|" = /node/expression/op/binary/BitwiseOr, "`" = /node/expression/op/binary/BitwiseXor, "+" = /node/expression/op/binary/Add, "-" = /node/expression/op/binary/Subtract, "*" = /node/expression/op/binary/Multiply, "/" = /node/expression/op/binary/Divide, "^" = /node/expression/op/binary/Power, "%" = /node/expression/op/binary/Modulo) /n_scriptOptions/nS_Options/New() .=..() for(var/O in assign_operators+binary_operators+unary_operators) if(!symbols.Find(O)) symbols+=O #undef ASCII_A #undef ASCII_Z #undef ASCII_LOWER_A #undef ASCII_LOWER_Z #undef ASCII_DOLLAR #undef ASCII_ZERO #undef ASCII_NINE #undef ASCII_UNDERSCORE