Создание правила парсера - PullRequest
       4

Создание правила парсера

0 голосов
/ 31 октября 2011

Я в настоящее время учусь в CSCI классе, компилятор в моем колледже.Я должен написать синтаксический анализатор для компилятора, и я уже сделал Добавление вычитания деления умножения и оператора присваивания.Мой вопрос заключается в том, что теперь мы должны сделать меньше чем равный (<=) и больше чем равный (> =), и я не уверен, как написать правило для этого ... Я думал что-то вроде ...

expr LESSTHAN expr                 { $1 <= $3 }

expr GREATERTHAN expr              { $1 >= $3 }

есть предложения?

1 Ответ

0 голосов
/ 31 октября 2011

Вы должны включить более точный вопрос. Вот некоторые общие предложения.

Структура правила для реляционных операций должна быть такой же, как и для арифметических операций. В обоих случаях у вас есть бинарные операторы. Разница в том, что один возвращает число, другой возвращает логическое значение. Хотя 1 + 1 >= 3 обычно является допустимым синтаксисом, другие комбинации, такие как 1 >= 2 => 5, скорее всего, недопустимы. Конечно, есть исключения. Некоторые языки допускают его как синтаксический сахар для множества операций. Другие просто определяют, что логические значения - это просто целые числа (0 и 1). Вам (или вашему назначению) решать, как будет выглядеть синтаксис.

В любом случае, вы, вероятно, не просто хотите добавить эти правила к expr, но создаете новое правило. Таким образом, вы различаете реляционные и арифметические выражения.

expr : 
    expr PLUS  expr | 
    expr MINUS expr | 
    ... ;

relational_expr : 
    expr LESSTHAN    expr |
    expr GREATERTHAN expr ;

assignment :
    identifier '=' relational_expr |
    identifier '=' expr            ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...