Ошибки fsyacc при сборке в Visual Studio - PullRequest
2 голосов
/ 17 февраля 2012

Я использую fsyacc в Visual Studio (используя шаблон Parsed Language Starter), но при выводе сборки не отображается строка / столбец, где произошла ошибка (только: fsyacc завершен с кодом 1 ). Я должен собрать из командной строки, чтобы получить эту информацию, несколько сводя на нет преимущества интеграции VS.

Есть ли способ показать это в окне вывода?

EDIT

Вот несколько примеров ошибок, которые не отображаются в окне вывода.

Parser.fsy(74,4): error: parse error

и

building tables
FSYACC: error FSY000: NonTerminal 'query' has no productions

Вот вывод об успехе, который было бы неплохо увидеть также:

building tables
computing first function...time: 00:00:00.1318603
building kernels...time: 00:00:00.1027372
building kernel table...time: 00:00:00.0533044
computing lookahead relations.............................
..............time: 00:00:00.0517415
building lookahead table...time: 00:00:00.0207993
building action table...state 29: shift/reduce error on AS
state 49: shift/reduce error on OR
state 49: shift/reduce error on AND
...
time: 00:00:00.1457792
building goto table...time: 00:00:00.0035636
returning tables.
39 shift/reduce conflicts
62 states
11 nonterminals
41 terminals
46 productions
#rows in action table: 62

1 Ответ

3 голосов
/ 18 февраля 2012

Вместо использования шаблона Parsed Language Starter, я создаю парсер / лексер, используя Pre-build event в Build Events из VS Project Properties:

fslex "$(ProjectDir)Lexer.fsl"
fsyacc --module Grammar "$(ProjectDir)Grammar.fsy"

Это не очень желательно, так как я должен установить fsyacc / fslex в переменной среды Path. Всякий раз, когда я не хочу перестраивать парсер / лексер, я должен закомментировать следующую часть в файле fsproj:

<PropertyGroup>
  <PreBuildEvent>fslex "$(ProjectDir)Lexer.fsl"
                 fsyacc --module Grammar "$(ProjectDir)Grammar.fsy"
  </PreBuildEvent>
</PropertyGroup>

Тем не менее, выигрышная точка очевидна. У нас есть все сообщения, включая сообщения об ошибках и об успешном выполнении, в stdout, что удобно для отладки.

...