Parsing Rascal DSL的解析问题

Parsing Rascal DSL的解析问题,parsing,dsl,rascal,Parsing,Dsl,Rascal,我无法分析语言实例 解析器抱怨第一行(test_exe) 以上是语言实例中的重复部分 如果我将最后一行替换为 configureLibrary(${TARGET_NAME} OBJ_TEST) 它确实有效 我试过了 syntax Configure = configure: ConfigureTestExecutable; syntax Configure = configure: ConfigureTestExecutable+; syntax Configure = configure:

我无法分析语言实例

解析器抱怨第一行(test_exe)

以上是语言实例中的重复部分

如果我将最后一行替换为

configureLibrary(${TARGET_NAME} OBJ_TEST) 
它确实有效

我试过了

syntax Configure = configure: ConfigureTestExecutable;
syntax Configure = configure: ConfigureTestExecutable+;
syntax Configure = configure: ConfigureTestExecutable*;
一切都不起作用

这个

不知怎么回事

start syntax Build = build: Section+ sections;

layout Layout = Comment*;

lexical Comment = @category="Comment" "#" ![\n]* [\n]; 

syntax Section = section: Target target Options+ options;

syntax Target = target: "set" "(" Id targetMacro Id targetName ")";

syntax Options = options: IdeFolder Dirs Sources Deps Configure; 

syntax IdeFolder = ideFolder: "set" "(" "$" "{" Id targetMacro "}" "_IDE_FOLDER" "\"" Id ideFolderPath "\"" ")";

syntax Dirs = dirs: "set" "(" "$" "{" Id targetMacro "}" "_DIRS" DirsPath+ dirPaths ")";

syntax DirsPath = dirPaths: "$" "{" Id pathMacro "}" Id? path;

syntax Sources = sources: "set" "(" "$" "{" Id targetMacro "}" "_SOURCES" SourceList+ sourceList ")"; 

syntax Configure = configure: 

//ConfigureLibrary* 

ConfigureTestExecutable;

//syntax ConfigureLibrary = configureLibrary: "configureLibrary" "(" "$" "{" Id targetMacro "}" Id buildTarget ")";

syntax ConfigureTestExecutable = configureTestExecutable: "configureTestExecutable" "(" "$" "{" Id targetMacro "}" Id buildTarget ")";

我得到的分析错误是:

rascal>x = parse(|project://Instrumentation/src/CMakeLists.cmake|); 
|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>): ParseError(|project://Instrumentation/src/CMakeLists.cmake|(32,1,<4,15>,<4,16>))
        at parse(|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>))
        at $root$(|prompt:///|(4,56,<1,4>,<1,60>))
        at *** somewhere ***(|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>))
        at parse(|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>))
        at $root$(|prompt:///|(4,56,<1,4>,<1,60>))
rascal>x=parse(|project://Instrumentation/src/CMakeLists.cmake|); 
|std:///ParseTree.rsc|(15449,5,,):解析错误(|project://Instrumentation/src/CMakeLists.cmake|(32,1,,))
在解析时(|std:///ParseTree.rsc|(15449,5,,))
在$root$(|提示符://|(4,56,,))
在某处***(|std:///ParseTree.rsc|(15449,5,,))
在解析时(|std:///ParseTree.rsc|(15449,5,,))
在$root$(|提示符://|(4,56,,))
两个观察结果:

  • 布局定义不包含空格,但由于缺少部分语法,我无法确定这是故意的(如布局敏感解析)还是问题的一部分
  • 您是否使用
    #Build
    #start[Build]
    进行分析?您需要第二个来处理文件开头或结尾的布局
  • 所以,也许你得把问题扩大一点

    另外,在成功后检查您的解析树是否正确,因为它可能将所有内容都解析为一个大字符串?

    我更改了

    layout Layout = Comment*;
    
    lexical Comment = @category="Comment" "#" ![\n]* [\n]; 
    

    在阅读了Pico语法示例之后,它现在可以工作了。感谢@Davy让我走上正轨(观察1)

    rascal>x = parse(|project://Instrumentation/src/CMakeLists.cmake|); 
    |std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>): ParseError(|project://Instrumentation/src/CMakeLists.cmake|(32,1,<4,15>,<4,16>))
            at parse(|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>))
            at $root$(|prompt:///|(4,56,<1,4>,<1,60>))
            at *** somewhere ***(|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>))
            at parse(|std:///ParseTree.rsc|(15449,5,<447,107>,<447,112>))
            at $root$(|prompt:///|(4,56,<1,4>,<1,60>))
    
    layout Layout = Comment*;
    
    lexical Comment = @category="Comment" "#" ![\n]* [\n]; 
    
    layout Layout = WhitespaceAndComment* !>> [\ \t\n\r#];
    
    lexical WhitespaceAndComment = [\ \t\n\r] | @category="Comment" "#" ![\n]* $;