树顶语法线延续

时间:2015-05-20 21:22:59

标签: ruby parsing bnf 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 个答案:

答案 0 :(得分: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

您的语言似乎没有比这更明显的结构。