承诺使用javacc进行生产

时间:2018-10-05 10:15:12

标签: java parsing javacc tatsu

我正在尝试编写javacc语法来解析包含如下表达式的文件:

"key_1" = "my value";
"key_2" = "value";

基本上我想匹配<KEY> "=" <VALUE> ";",其中:

  • <KEY>匹配正则表达式\"[a-zA-Z][a-zA-Z0-9_\-\.]*\"(例如,匹配"key1""my_key1""my-key1""my.key1",但不匹配{{ 1}})
  • "0key"是用双引号引起来的任何字符串,并允许转义的引号(例如,匹配<VALUE>"Hello""Hi there"

到目前为止,我已经完成了一些工作,但是当"escaped \" quote"的正确行程与=令牌的定义匹配时,它会失败。例如,由于<KEY>"key_1" = "my value";不匹配,它对"my value"的解析很好,但是由于<KEY>"key_2" = "value";的匹配,它无法解析"value"。 / p>

具体地说,我尝试解析<KEY>的错误是:

"key" = "value";

这是我在名为Exception in thread "main" ParseException: Encountered " <KEY> "\"value\" "" at line 1, column 12. Was expecting: <VALUE> ... 的文件中的javacc语法:

TestParser.jj

如何指定一旦看到options { STATIC=false; } PARSER_BEGIN(TestParser) public class TestParser { public static void main(String[] args) throws Exception { final TestParser parser = new TestParser(new java.io.FileReader(args[0])); parser.program(); } } PARSER_END(TestParser) SKIP : { " " | "\t" | "\n" | "\r" } TOKEN : { < KEY: "\"" (["a"-"z"]|["A"-"Z"]) (["a"-"z"]|["A"-"Z"]|["0"-"9"]|"_"|"-"|".")+ "\"" > | < VALUE: "\"" ("\\" ~[]| ~["\"","\\"])* "\"" > } void program() : {} { (assignment())* <EOF> } void assignment(): {} { <KEY> "=" <VALUE> ";" } ,下一个有效令牌只能是<KEY> "="?我曾经使用过TatSu,在此之前专门使用过"cut" expression,但在javacc中找不到任何等效项。

0 个答案:

没有答案