Разбор вложенного оператора if с использованием JavaScript - PullRequest
1 голос
/ 05 января 2010

У меня есть несколько вложенных операторов if со следующим синтаксисом:

// Comment for condition 1
if(condition1
,expression1
    ,
    // Comment for condition 2
    if(condition2
        ,expression2
        ,else2))

Операторы if не соответствуют синтаксису JavaScript. Они написаны на языке, который «не является общеизвестным, как смесь VBscript и JavaScript».

Теперь я хотел бы проанализировать эти операторы if, чтобы увидеть, являются ли они синтаксически правильными или нет. Как я мог это сделать?

Ответы [ 4 ]

1 голос
/ 05 января 2010

Ну, проверить правильность основ (правильное количество аргументов, открывающие / закрывающие скобки, количество запятых и т. Д.) Не составит труда - вы можете легко обслужить вложенные IF, используя рекурсивные методы.

Но вы также должны сообщить нам, нужно ли также проверять правильность синтаксиса "условие" и "выражение"?

А запятые или скобки, например, будут допустимыми внутри выражения или условия? Если это так, вам нужно определить свои правила для квалификации строки, escape-символов и т. Д., Так что ваш синтаксический анализатор интерпретирует их как часть выражения или условия и не путает их как управляющие символы.

В самом простом виде, однако, некоторые psuedo -код:

var stmt = "IF(condition,expression,IF(condition,expr2,expr3))"
function checkIfSyntax(stmt){
   var tokens = splitStmt(stmt); // careful to take into account where
                                 // control chars (that is, commas and
                                 // brackets) are qualified, escaped,
                                 // or inside a nested IF()
   checkCondition(tokens.condition); //with whatever rules you have, plus [1]
   checkExpression(tokens.expr1); //with whatever rules, plus [1]
   checkExpression(tokens.expr2); //with whatever rules, plus [1]
   /* [1]: if any of the tokens are nested IF() statements, 
           call checkIfSyntax() from within checkCondition()
           or checkExpression()
           - (this is the recursive bit) */
}

Это просто , надеюсь , чтобы вы встали на правильный путь. Фактически полностью ответить на ваш вопрос - значит написать его для вас - я не думаю, что кто-то собирается это сделать. Постарайтесь понять вышеизложенное, а также прочитать ссылки, предоставленные другими, и, надеюсь, вы должны встать на правильный путь

1 голос
/ 05 января 2010

Исходный код для существующего анализатора JS можно найти здесь: Исходный код JSLint

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

0 голосов
/ 05 января 2010

В книге «Красивый код» есть раздел, в котором есть учебник (с рабочим парсером в конце) по написанию парсера на Javascript:

http://www.amazon.co.uk/gp/product/product-description/0596510047/ref=dp_proddesc_0?ie=UTF8&n=266239&s=books

ИМХО: действительно хорошая книга - она ​​похожа на версию Geek "Comic Relief" или "Band Aid" ... [В том смысле, что я, кажется, помню, что часть доходов идет на благотворительность или что-то в этом роде - но в основном множество интересных статей и фрагментов кода от великих программистов всех поколений и на многих вычислительных языках].

0 голосов
/ 05 января 2010

Парсинг кода Javascript, чтобы увидеть, является ли он синтаксически правильным, не является тривиальной задачей .. (на самом деле это верно для большинства программного кода)

Возможно, вы захотите запустить интерпретатор Javascript для проверки синтаксиса кода. Если вы работаете в среде Java, вы можете использовать для этого интерпретатор Rhino.

Возможно, укажите немного больше, в каком контексте вы хотите это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...