Я создаю решение для клиента, которое позволяет им создавать очень простой код, теперь я сделал некоторую базовую проверку синтаксиса, но я застрял в проверке переменных.
Я знаю, что JSLint делает этоиспользуя Javascript, и мне было интересно, если кто-нибудь знает хороший способ сделать это.
Так, например, скажем, пользователь написал код
moose = "barry"
base = 0
if(moose == "barry"){base += 100}
Затем я пытаюсь найти способуточнить, что выражение «если» имеет правильный синтаксис, если переменная moose была инициализирована и т. д. и т. д., но я хочу сделать это без сканирования символьно, код является мини-языком, созданным только для этого приложения, поэтому он оченьбазовый и не требует управления памятью или чем-то в этом роде.
Я думал о разделении сначала по Carriage Return, а затем по пробелу, но нечего сказать, что пользователь не напишет что-то вроде moose="barry"
или if(moose=="barry")
и нечего сказать, что пользователь не будет хранить результат условия в строке.
Очевидно, компиляторы и интерпретаторысделать это в гораздо более широком масштабе, но я не уверен, что они делают это символ за символом, и если они делают, как они оптимизировали?
(Другой вариант, я мог бы отправить его обратно в PHP для обработкичто затем освободит браузер от ответственности)
Любые предложения?
Спасибо
Вариант использования ограничен, синтаксис в этом случае никогда не будет расширяться, языкпростой язык сценариев, позволяющий клиенту создавать уникальную стоимость на основе ввода своих пользователей, конечный результат будет обрабатываться PHP независимо от того, что конечный пользователь не сможет откорректировать расчет, а также для обеспечения некоторой согласованности.
Так, например, скажем, что базовая стоимость составляет £ 1,00, а в форме есть поле «Дополнительные затраты», язык позволит им манипулировать базовой стоимостью относительно поля «Дополнительные расходы».
Итак
base = 1;
if(additional > 100 && additional < 150){base += 50}
elseif(additional == 150){base *= 150}
else{base += additional;}
Это базовый пример использования языка.
Спасибодля всех ваших ответов я исследовал парсер, и его создание было бы гораздо более сложным, чем требовалось, выполнив несколько тестов с тысячами строк кода, и обнаружил, что посимвольный анализ занимает всего несколько секунд даже на одномCore P4 с 512 МБ памяти (что намного меньше, чем использует клиент)
Я решил создать синтаксическую проверку на основе PHP, которая будет проверять информацию и преобразовывать переменные и т. д. в действительный код PHP во время проверки.это (так что он готов к вызову позже без перекомпиляции) с использованием этого вместо javascript, это кажется более подходящим и позволит возникать более сложный код, не мешая процессу проверки
Это заняло всего час, и у меня естьКод, который может проверять правильность оператора if и не смущен вложенными выражениями if, пробелами или нечетными выражениями, проверять очень мало, в то время как анализатор и полноценный язык сценариев заняли бы намного больше времени
Вы все дали мне много о чем подумать, и я оценил соответствующие ответы, спасибо