这个Rascal语法出了什么问题?

时间:2018-05-04 18:27:49

标签: context-free-grammar rascal

所以我试图让这个语法起作用,但它给了我一个错误。它来自Number lexical中的@ context =“num”。它告诉我这是模糊的,任何人都可以告诉我为什么?

start syntax Statement = Type Id "=" Number ";" ;   

lexical Id = @context="id" [a-z] !<< [a-z]+ !>> [a-z] \ Type;

lexical Number = @context="num" [0-9]+;

keyword Type = @context="type" ("int"|"str"|"float");

它真的很奇怪,因为它没有@context标签,但是当我添加它时,我突然不能在另一个模块中导入/找到符号Statement。或者是给我的语法是模棱两可的错误。

请帮助

**编辑:** 如果我将关键字Type更改为正常的词法类型,那么无论是否有括号,问题仍然存在。

1 个答案:

答案 0 :(得分:1)

我不认为你应该用关键词lexical来解析,因为它往往是很多东西的组合。

并且,关键字必须是具有普通文字的正常列表操作。它不适用于任意正则表达式。

所以它之所以在没有上下文的情况下工作的原因,我猜是因为你还删除了括号,这会把它变成一个替代的一般列表?