Можно ли вызывать C # лексические / синтаксические анализаторы без компиляции? - PullRequest
4 голосов
/ 10 апреля 2010

Учитывая этот вопрос SO, где вызывается весь компилятор C # в памяти. Когда требуется только лексический и синтаксический анализ : проанализируйте текст как поток лексем, проверьте его и выйдите.

Возможно ли это в текущей версии System.CodeDom.Compiler , если нет - будет ли?

Ответы [ 2 ]

6 голосов
/ 10 апреля 2010

Если вы можете использовать Mono, я думаю, имеет синтаксический анализатор C # / lexer , который вы можете использовать.

Вот ссылка для просмотра. Что касается того, что команда MS C # планирует сделать, то есть некоторые разговоры о том, что в какой-то момент компилятор C # превращается в "службу" - но неясно, что это значит или когда это произойдет.

1 голос
/ 10 апреля 2010

Хотя может показаться, что код скомпилирован в памяти (CompilerParameters.GenerateInMemory), на самом деле это не так. Для компиляции кода используется тот же компилятор, что и в Visual Studio (csc.exe). Он запускается CreateProcess (во многом как Process.Start) и запускается вне процесса, чтобы скомпилировать код в сборку на диске во временной папке. Опция GenerateInMemory вызывает Assembly.LoadFrom () для загрузки сборки.

Вы получите эквивалент проверки синтаксиса, просто установив для GenerateInMemory значение false и удалив OutputAssembly после того, как это будет сделано.

Хотя это может звучать как-то задом наперед, но огромным преимуществом является то, что это не окажет никакого давления на память вашего процесса. Это будет держать вас до тех пор, пока не выйдет C # 5.0.

...