Skip to main content

String literals

Hybrix represents text as strings made of characters. A character is a single letter or digit or punctuation mark or graphical glyph. Each character is represented by a single byte, forming an array of bytes. The system definition for string therefore looks like this:

type string is byte[]

Recall that a byte is an integer number between 0 and 255. Hybrix provides a standard mapping of characters for each number, called HASCII. It is based on the ASCII (American Standard Code for Information Interchange) and ISO/IEC 8859-1 standards, but with some differences for control characters and graphical glyphs.

NOTE: Some programming languages use a zero byte to indicate the end of the string. This is not needed in Hybrix, because arrays already track their size.

Escape sequences

Hybrix text strings are enclosed in double quotes, for example:

module main
func start()
var s: string
"Hello, world!" -> s
end func
end module

Using your keyboard, it can be difficult to type certain characters such as ¢ or . Control codes such as green or clear screen do not have a standard glyph that we can show in the code. To handle these cases, string literals can include escape sequences enclosed in { } curly braces. In particular, {quote} is used to escape a double-quote (") which would otherwise terminate the string.

For example:

module main
func start()
var s: string

console::init()

"{star} The cost is 50{cent}" -> s

# The printed output will look like:
#
# ★ The cost is 50¢
#
console::print(s)

# Skip two lines
console::print("{n}{n}")

# The printed output will look like:
#
# This "word" is in quotes
#
console::print("This {quote}word{quote} is in quotes")
end func
end module

You can also escape any character by using its hex value. For example, "{$41}{$42}{$43}" is equivalent to "ABC".

The full list of escape sequences can be found in the HASCII table reference sheet.

Character literals

Individual Hybrix characters are byte values. Normally the literal value for a byte is a decimal or hexadecimal number, for example:

module main
func start()
var a: byte, b: byte
a <- 97
b <- $0a # $0a is hexadecimal for 10
end func
end module

You can also specify a byte value using a character literal. The syntax is similar to string literals, except:

  • It must represent exactly one HASCII character (one byte).
  • It uses single quotes (') instead of double quotes (").
  • To specify a single-quote character, escape it as {apos} instead of {quote}. ('{quote}' and '"' are also valid character literals.)

A character literal produces the HASCII byte value for that character.

For example, the above code can be written equivalently as:

module main
func start()
var a: byte, b: byte
a <- 'a' # The character "a" has HASCII code 97
b <- '{n}' # The newline control character has HASCII code 10
end func
end module