Я считаю, что это должно сработать (новые строки добавлены только для ясности и удаления лишних кавычек):
dmd '-od"bin"' '-of"bin\convHull.exe"' '-I"src"'
src\concSort.d src\fileParser.d src\main.d src\pointLogic.d src\quickHull.d src\stupidHull.d
-D -O -release
Обратите внимание, что в случае, когда кавычка (") должна быть передана как часть самого аргумента , я окружил весь аргумент одинарными кавычками ('). Из приведенного ниже эксперимента это может быть видел, что только -of"..."
нужны цитаты об этом.
Удачного кодирования.
Я не могу найти хорошую ссылку на это точное производство, однако обратите внимание на следующие разборы:
-x"w." -> error: " expected (last " is special)
-x"w."" -> -x"w and ."" (the . starts a new token and the " in that starts
a quote; however, the quotes are not removed)
'-x"w."' -> -x"w." (extra quote fine, neither special)
-x"w" -> -x"w" (no . and " not special)
-x"w"" -> -x"w"" (no . and " not special)
a".b" -> a.b (didn't start with `-`, quotes removed)
a".b -> error: " expected (" is special)
Так что, похоже, это действительно имеет отношение к комбинации .
и -
(и это может быть не исключение). Исходя из вышесказанного, я считаю, что токен, начинающийся с -
, не включает в себя символ .
в качестве действительного символа в токене, поэтому лексер завершает указанный токен и запускает новый токен - легко доказываемый с помощью хороший справочник EBNF, которого у меня нет.
Лучшее, что я могу найти, это Приложение C: Грамматика PowerShell :
Правило ParameterToken используется для сопоставления параметров командлета, таких как -foo или -
boolProp:. Обратите внимание, что это правило также будет соответствовать --foobar, поэтому это правило имеет
проверяться перед правилом --token.
<ParameterToken> = -[:letter:]+[:]{0 |1}
Однако в лучшем случае это неполно и даже не включает определение «буквы».