2016-10-31 3 views
0

Я нашел документацию на сайте Rascal: http://tutor.rascal-mpl.org/Rascal/Libraries/lang/java/m3/AST/createAstFromFile/createAstFromFile.html Но я честно понятия не имею, как применить это. Может ли кто-нибудь дать мне пример того, как применить это в коде? Я пробовал кое-что, но либо пропускаю модификатор «java», либо необъявленные переменные ошибки, которые мне совсем не помогают.Как создать Rascal AST из файла

В настоящее время я застрял на:

ast = createAstFromFile(l,true,"1.8"); 

два дополнительных вопроса: что "Декларация" здесь добавить? И что означает в этом контексте значение boolean collectBindings? (документация не так ясно, связанные с этой части Rascal)

Дополнительная информация:

rascal>import lang::java::jdt::m3::Core; 
ok 
rascal>createM3FromEclipseFile(|project://smallsql/src/smallsql/tools/CommandLine.java|); 
|plugin://rascal_eclipse/src/org/rascalmpl/eclipse/library/lang/java/jdt/Project.rsc|(276,127,<11,0>,<12,47>): IO("**smallsql does not exist**") 
     at somewhere plugin://rascal_eclipse/src/org/rascalmpl/eclipse/library/lang/java/jdt/Project.rsc|(276,127,<11,0>,<12,47>)) 
     at classPathForProject(|plugin://rascal_eclipse/src/org/rascalmpl/eclipse/library/lang/java/jdt/m3/Core.rsc|(1776,2,<54,55>,<54,57>)) 
     at $root$(|prompt:///|(0,82,<1,0>,<1,82>)) 


rascal>projects(); 
set[loc]: { 
    |project://smallsql|, 
    |project://MetricsTest|, 
    |project://Analysis|, 
    |project://hsqldb| 
} 

ответ

1

У меня было подобное везение, но нашел следующий обходной путь:

createAstsFromEclipseProject(|project://myProject|,true) 

Это даст вам все возможности для проекта, и вы можете выбрать тот, который вам нужен.

Проблема связана с параметрами компилятора (classpath и т. Д.). При задании проекта функция может выводить метаинформацию из конфигурации проекта, что делает ее работу корректно.

  • collectBindings означает, что файлы не просто разбираются, но также связывание имени и привязка типа выполняется. Это полезно, но требуется больше времени.
  • Declaration - это всего лишь общий тип вещей, которые что-то объявляют.