Skip to main content

7. Generate a YACC specification to recognize a valid identifier which starts with a letter followed by any number of letters or digits.


 here's a YACC specification that recognizes a valid identifier according to the given criteria:


```yacc

%{

#include <stdio.h>

%}


%token IDENTIFIER


%%

start: IDENTIFIER   { printf("Valid identifier: %s\n", $1); }

     ;


IDENTIFIER: [a-zA-Z][a-zA-Z0-9]*

     ;


%%

int main() {

    yyparse();

    return 0;

}

```


Explanation of each line of code:


1. `%{` and `%}`: These delimiters are used to include C code that will be inserted into the generated parser code. In this case, it's used to include the `<stdio.h>` header for printing.


2. `%token IDENTIFIER`: Declares the token type `IDENTIFIER`. This informs YACC that the parser will recognize and generate tokens of this type.


3. `%%`: Separates the YACC grammar rules from the C code.


4. `start: IDENTIFIER`: Defines the `start` rule. This rule states that the input should consist of a valid identifier.


5. `{ printf("Valid identifier: %s\n", $1); }`: This action is associated with the `start` rule. It's executed when the rule is recognized. `$1` refers to the first value on the right-hand side of the rule, which is the recognized identifier. This action prints the valid identifier.


6. `;`: Ends the `start` rule.


7. `IDENTIFIER: [a-zA-Z][a-zA-Z0-9]*`: This is the definition of the `IDENTIFIER` token. It follows the given criteria that an identifier starts with a letter and is followed by any number of letters or digits.


    - `[a-zA-Z]`: Represents a single letter (uppercase or lowercase).

    - `[a-zA-Z0-9]*`: Represents zero or more letters or digits after the initial letter.


8. `;`: Ends the `IDENTIFIER` token definition.


9. `%%`: Separates the grammar rules from the C code.


10. `int main() { yyparse(); return 0; }`: This is the main function. It calls the YACC-generated parser (`yyparse()`) to start parsing the input. After parsing, the program returns 0.


This YACC specification defines the grammar rules for recognizing valid identifiers and includes C code to print the recognized identifiers. Remember that YACC generates C code for the parser based on these specifications.


Comments

Popular posts from this blog

Program 6: Finding Prime Numbers in a Range

  ** Program 6: Finding Prime Numbers in a Range ** ```assembly .model small .stack 100h .data     start dw 1     end dw 20 .code     main proc         mov ax, start           ; Load 'start' into AX              find_primes:         inc ax                  ; Move to the next number         cmp ax, end             ; Compare with 'end'         jg end_prog             ; Jump to end if AX > 'end'                  mov cx, ax              ; Copy AX to CX   ...

4. Write a LEX Program to convert the substring abc to ABC from the given input string.

Sure, here's a LEX program that converts the substring "abc" to "ABC" in the given input string: ```lex %{ #include <stdio.h> %} %% .*abc.*    { printf("%s", yytext); }    /* Match and print everything containing 'abc' */ .         ;                            /* Ignore other characters */ %% int main() {     yylex();     return 0; } ``` Now, let's break down the code line by line: 1. `%{` and `%}`: These are used to enclose C code that should be included in the generated C code. In this case, it includes the standard input-output library (`<stdio.h>`). 2. `.*abc.*`: This is a regular expression pattern. It matches any sequence of characters that contains the substring "abc". 3. `{ printf("%s", yytext); }`: This is the action associated with the pattern. When the pattern is matched, the `yytext` variable contains the matched te...

ktu 2019 Cse Complier programing Lab Syllabus

 1Design and implement a lexical analyzer using C language to recognize all valid tokens  in the input program. The lexical analyzer should ignore redundant spaces, tabs and  newlines. It should also ignore comments. 2. Implement a Lexical Analyzer for a given program using Lex Tool. 3. Write a lex program to display the number of lines, words and characters in an input text. 4. Write a LEX Program to convert the substring abc to ABC from the given input string. 5. Write a lex program to find out the total number of vowels and consonants from the given  input string. 6. Generate a YACC specification to recognize a valid arithmetic expression that uses  operators +, – , *,/ and parenthesis. 7. Generate a YACC specification to recognize a valid identifier which starts with a letter  followed by any number of letters or digits.   8. Implementation of Calculator using LEX and YACC  9. Convert the BNF rules into YACC form and write code to generat...