Parsing Rascal DSL的解析问题
我无法分析语言实例 解析器抱怨第一行(test_exe) 以上是语言实例中的重复部分 如果我将最后一行替换为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:
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]* $;