Как мога да съпоставя число с незадължителен буквен суфикс в езикова спецификация на GtkSourceView?

Пиша нова езикова спецификация на GtkSourceView; следвайки информацията, намерена в урока и в други интернет ресурси. Езикът, който дефинирам, може да приеме цифра като:

  1. Един или повече digit знака
  2. По желание добавена (напр. в края) буква L, l, N или n.

Примери:

1000
1234L
987654321n

Моля, имайте предвид, че това е само едно от няколкото възможни определения.

Досега съм писал (приблизително (Други части от определението са пропуснати)):

<context id="number" style-ref="decimal" end-at-line-end="true">
    <start>(\d+)([NnlL]?)</start>
    <end>\D</end>
</context>

Тълкувам това като: _A number започва с една или повече цифри, последвани по избор от някое от следните: N n l L, и завършва, когато се срещне нецифрено число (напр. интервал, буква.)

За съжаление това не работи съвсем, тъй като добавянето на който и да е от посочените знаци (или който и да е знак за този въпрос) води до неуспех (в този контекст това означава да не се маркира.)

Някакви идеи как да съчетаем този модел? Благодаря предварително! :)


person Miguel    schedule 04.10.2012    source източник


Отговори (1)


Нямате нужда от контекст на контейнер; това е за неща като низови литерали и коментари, където го идентифицирате чрез начални и крайни шаблони и може да съдържа други контексти. (Например низовият литерал може да съдържа последователности за екраниране като \n, които може да искате да маркирате по различен начин, както в тази екранна снимка.) Вашите "числови" токени могат да бъдат съпоставени напълно с един прост регулярен израз, което означава, че искате прост контекст:

<context id="number" style-ref="decimal">
    <match>\b\d+[NnlL]?\b</match>
</context>

Отказ от отговорност: Никога не съм използвал GtkSourceView, но съм работил с други маркери за синтаксис, базирани на регулярен израз, включително EditPad Pro и един, който написах сам на Java.

person Alan Moore    schedule 05.10.2012