[antlr-interest] (Antlr C Target) Need help converting uint8_t to string
Jay T
dr.jaymahdi at gmail.com
Sun Sep 5 14:15:12 PDT 2010
Nevermind, I answered my own question I think ... not sure if it is the
golden solution but just worked for me...
J
declarator [string &typeName]
: ID {
uint8_t *widget;
widget = ($ID.text->chars);
typeName.append(1,*widget);
}
;
PS. Please forgive my dumb / unintentional nuisance questions.
On Sun, Sep 5, 2010 at 4:37 PM, Jay T <dr.jaymahdi at gmail.com> wrote:
> Hi everyone:
>
> I am very new to Antlr so please be patient with me.
> I am writing a grammar that will be generated for a C target, compiled
> using C++.
>
> The problem I have is I am trying to convert a token text into a string
> text which will be used for my internal data structures written in C++.
> One error that I keep getting is " ToyParser.c:415: error: invalid
> conversion from ‘uint8_t*’ to ‘char’ ".
> I have searched exhaustively on Google trying to figure out how to convert
> a uint8_t to a string and unfortunately could not find any resolution -- so
> hopefully an Antlr C programmer guru can give me some advice on how to a
> solution to this problem.
>
> Below is a "Toy" Grammar file. I am simply trying to convert any received
> token text into a string, and use this as a basis to convert certain tokens
> to int's for my own custom data structure.
>
> If someone could please kindly respond, it would be greatly appreciated.
>
> Thanks
>
>
>
>
>
>
>
> grammar Toy;
>
> options {
> language = C;
> }
>
> @Scope
> {
> string typeName;
> }
>
> @header
> {
> #include <iostream>
> #include <string>
> #define ANTLR3_INLINE_INPUT_ASCII
>
> using namespace std;
> }
>
>
> @members
> {
>
> #include <iostream>
> #include <string>
> #include "ToyLexer.h"
>
> using namespace std;
>
> int main(int argc, char * argv[])
> {
>
> pANTLR3_INPUT_STREAM input; //Create the input
> stream
> pToyLexer lex;
> //Lexer supplied by pANTLR3_INPUT_STREAM (Translate to tokens)
> pANTLR3_COMMON_TOKEN_STREAM tokens; //Token stream supplied by parser
> (Store tokens)
> pToyParser parser; //Parser
> gets the tokens and sementally understands the tokens in order
>
>
>
> input = antlr3AsciiFileStreamNew ((pANTLR3_UINT8)argv[1]);
> //Provide file input
> lex = ToyLexerNew (input);
> //Create instance of lexer and set it to the
> file name input
> tokens = antlr3CommonTokenStreamSourceNew (ANTLR3_SIZE_HINT,
> TOKENSOURCE(lex)); //Create token stream from the lexer
> parser = ToyParserNew (tokens);
> //Feed in tokens into
> the parser
>
> string Name;
>
> parser ->declarator(parser, Name);
> //Call the parser rule
>
> parser ->free(parser);
> tokens ->free(tokens);
> lex ->free(lex);
> input ->close(input);
>
> cout << "Received name: " << Name << endl;
>
> return 0;
> }
>
> }
>
>
>
>
> //----- PARSER RULES -----//
>
> declarator [string &typeName]
> : ID {
> typeName.append(1,$ID.text->chars);
> }
> ;
>
> //----- LEXER RULES -----//
>
> ID
> : ('A'..'Z' | 'a'..'z')+
> ;
>
> DIGIT
> : ('0'..'9')+
> ;
>
> WS
> : (' ' | '\t' | '\r' | '\f' | '\n')+ {$channel=HIDDEN;}
> ;
>
>
More information about the antlr-interest
mailing list