2015-05-20 4 views
0

Я пытаюсь создать грамматику для языка, как следующийTreetop грамматику продолжение строки

someVariable = This is a string, I know it doesn't have double quotes 
anotherString = This string has a continuation _ 
     this means I can write it on multiple line _ 
     like this 
anotherVariable = "This string is surrounded by quotes" 

Каковы правильные правила грамматики Treetop, анализирующие предыдущий код правильно?

я должен быть в состоянии извлечь следующие значения для трех переменных

  • Это строка, я знаю, что это не имеет двойные кавычки
  • Эта строка имеет продолжение это означает, что я могу написать это на множественном линии, как этот
  • Эта строка окружена кавычками

Спасибо

ответ

1

Если вы определяете последовательность «_ \ n», как если бы это был один символ пробела, и убедитесь, что вы проверяете это до того, как вы примете конец строки, продолжение линии в стиле VB должно просто выпадать , В VB новая строка «\ n» не является белым пространством как таковым, а является отличным символом завершения вывода. Вам, вероятно, также необходимо иметь дело с возвратами каретки, в зависимости от правил обработки входных символов. Я хотел бы написать правило белого пространства, как это:

rule white 
    ([ \t]/"_\n" "\r"?)+ 
end 

Тогда ваше правило утверждения выглядит следующим образом:

rule variable_assignment 
    white* var:([[:alpha:]]+) white* "=" white* value:((white/!"\n" .)*) "\n" 
end 

и ваши верхних правила:

rule top 
    variable_assignment* 
end 

Вашего язык не похоже, имеют более очевидную структуру, чем это.

+0

Клиффорд, я считаю, что вы поставили меня на правильный путь, но я думаю, было бы полезно, если бы вы могли написать все правила, чтобы сделать этот синтаксический анализ кода. Затем я приму свой ответ. Я отредактировал вопрос, чтобы исправить ошибку, о которой вы указали. – soulnafein

+0

Обратите внимание, что я не рассматривал ситуацию с двойной кавычкой, потому что вы не очень хорошо определили эту часть проблемы. Но это должно заставить вас идти, легко добавить цитату. – cliffordheath

+0

Спасибо Клиффорд. Что такое var: и значение:? – soulnafein

Смежные вопросы