1. Синтаксис языка LuaGML

GML-текст состоит из пар тег-значение, называемых элементами. Тег представляется в виде идентификатора. Все теги определены в языке. Неизвестные теги просто игнорируются. Значениями могут быть целые и вещественные числа, строки и списки. В свою очередь, списки также могут содержать пары тег-значение. Важно, чтобы структура текста соответствовала требованиям синтаксиса GML. Ниже представлен синтаксис GML в БНФ-нотации, где nil обозначает пустое значение, x+ - последовательность из одного или более значения x, x* - последовательность из нуля или более значений x, в одиночных кавычках находятся терминальные символы, в угловых скобках - нетерминальные. В составе строк допускаются 8-ми битные символы ASCII (256 символов), где первые 128 символов представляют собственно ASCII, а последующие 128 символов - национальный алфавит, например КОИ8, или Cp1251, или Cp866.

<GML> ::= <List>
<List> ::= nil | <TagValue> (<WhiteSpace>+ <TagValue>)*
<TagValue> ::= <Tag> <WhiteSpace>+ <Value>
<Value> ::= <Integer> | <Real> | <String> | '[' <List> ']'
<Tag> ::= ['a'-'z''A'-'Z']['a'-'z''A'-'Z''0'-'9']*
<Integer> ::= <Sign> <Digit>+
<Real> ::= <Sign> <Digit>+ '.' <Digit>+ <Mantissa>
<String> ::= '"' <Instring> '"'
<Sign> ::= nil | '+' | '-'
<Digit> ::= ['0'-'9']
<Mantissa> ::= nil | 'E' <Sign> Digit+ | 'e' <Sign> Digit+
<Instring> ::= ASCII

Синтаксис GML в БНФ-нотации.

В GML также определен специальный тег для комментариев - '#'. Часть строки, которая следует за этим символом, должна игнорироваться парсером (программой чтения) GML.

Для всех типов установлены значения по умолчанию: 0 для целых и вещественных типов, пустая строка для строк, пустой список для списков.